From 45ff42c3ca002b4426f6dad1fe8fc132be9dece7 Mon Sep 17 00:00:00 2001 From: Lawrence Lee Date: Wed, 14 Aug 2024 17:29:20 -0700 Subject: [PATCH 1/3] run VS tests in parallel (#1414) Signed-off-by: Lawrence Lee --- .../test-docker-sonic-vs-template.yml | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/.azure-pipelines/test-docker-sonic-vs-template.yml b/.azure-pipelines/test-docker-sonic-vs-template.yml index 8b2292962..bfc89ad43 100644 --- a/.azure-pipelines/test-docker-sonic-vs-template.yml +++ b/.azure-pipelines/test-docker-sonic-vs-template.yml @@ -96,20 +96,10 @@ jobs: fi all_tests=$(ls test_*.py) all_tests="${all_tests} p4rt" - test_set=() - # Run 20 tests as a set. - for test in ${all_tests}; do - test_set+=("${test}") - if [ ${#test_set[@]} -ge 20 ]; then - test_name=$(echo "${test_set[0]}" | cut -d "." -f 1) - echo "${test_set[*]}" | xargs sudo py.test -v --force-flaky --junitxml="${test_name}_tr.xml" $params --imgname=docker-sonic-vs:$(Build.DefinitionName).$(Build.BuildNumber).asan-${{ parameters.asan }} - test_set=() - fi - done - if [ ${#test_set[@]} -gt 0 ]; then - test_name=$(echo "${test_set[0]}" | cut -d "." -f 1) - echo "${test_set[*]}" | xargs sudo py.test -v --force-flaky --junitxml="${test_name}_tr.xml" $params --imgname=docker-sonic-vs:$(Build.DefinitionName).$(Build.BuildNumber).asan-${{ parameters.asan }} - fi + RETRY=3 + IMAGE_NAME=docker-sonic-vs:$(Build.DefinitionName).$(Build.BuildNumber).asan-${{ parameters.asan }} + echo $all_tests | xargs -n 1 | xargs -P 8 -I TEST_MODULE sudo ./run-tests.sh "$IMAGE_NAME" "$params" "TEST_MODULE" "$RETRY" + rm -rf $(Build.ArtifactStagingDirectory)/download displayName: "Run vs tests" ${{ if or(ne(variables['Build.Reason'], 'PullRequest'), eq(parameters.asan, true)) }}: From dbcba69b04e774a442cccda642d9bddbe82b9ee9 Mon Sep 17 00:00:00 2001 From: Junhua Zhai Date: Sat, 7 Sep 2024 03:38:24 +0800 Subject: [PATCH 2/3] [saisubmodule] Update SAI submodule (#1409) * Update SAI submodule * Update NVDAMBF2H536C/dashapis.rec * Run new DASH VS tests Signed-off-by: Lawrence Lee --------- Signed-off-by: Lawrence Lee Co-authored-by: Lawrence Lee --- .../test-docker-sonic-vs-template.yml | 2 +- SAI | 2 +- meta/MetaKeyHasher.cpp | 4 +- meta/SaiSerialize.cpp | 4 +- saiplayer/SaiPlayer.cpp | 8 +-- syncd/SwitchNotifications.h | 1 + syncd/Syncd.cpp | 4 +- syncd/tests/TestSyncdNvdaBf.cpp | 40 +++++++++++---- syncd/tests/TestSyncdNvdaBf.h | 3 ++ tests/NVDAMBF2H536C/dashapis.rec | 50 +++++++++---------- tests/TestDash.cpp | 38 +++++++------- unittest/meta/TestMetaDash.cpp | 40 +++++++++++---- unittest/syncd/TestVendorSai.cpp | 40 +++++++++++---- 13 files changed, 151 insertions(+), 85 deletions(-) diff --git a/.azure-pipelines/test-docker-sonic-vs-template.yml b/.azure-pipelines/test-docker-sonic-vs-template.yml index bfc89ad43..95845a6b0 100644 --- a/.azure-pipelines/test-docker-sonic-vs-template.yml +++ b/.azure-pipelines/test-docker-sonic-vs-template.yml @@ -95,7 +95,7 @@ jobs: params='--graceful-stop' fi all_tests=$(ls test_*.py) - all_tests="${all_tests} p4rt" + all_tests="${all_tests} p4rt dash" RETRY=3 IMAGE_NAME=docker-sonic-vs:$(Build.DefinitionName).$(Build.BuildNumber).asan-${{ parameters.asan }} echo $all_tests | xargs -n 1 | xargs -P 8 -I TEST_MODULE sudo ./run-tests.sh "$IMAGE_NAME" "$params" "TEST_MODULE" "$RETRY" diff --git a/SAI b/SAI index be523777d..684a8ee78 160000 --- a/SAI +++ b/SAI @@ -1 +1 @@ -Subproject commit be523777da96504758d3bb6b3696ae7d1129419d +Subproject commit 684a8ee78d4f7393e355ddc4bf1181f8aa57708e diff --git a/meta/MetaKeyHasher.cpp b/meta/MetaKeyHasher.cpp index 61247c39c..65fe6c592 100644 --- a/meta/MetaKeyHasher.cpp +++ b/meta/MetaKeyHasher.cpp @@ -309,7 +309,7 @@ static bool operator==( { // SWSS_LOG_ENTER(); // disabled for performance reasons - return a.switch_id == b.switch_id && a.eni_id == b.eni_id && a.destination == b.destination; + return a.switch_id == b.switch_id && a.destination == b.destination && a.outbound_routing_group_id == b.outbound_routing_group_id; } static bool operator==( @@ -673,8 +673,8 @@ static inline std::size_t sai_get_hash( // SWSS_LOG_ENTER(); // disabled for performance reasons std::size_t hash = 0; - boost::hash_combine(hash, oe.eni_id); boost::hash_combine(hash, sai_get_hash(oe.destination)); + boost::hash_combine(hash, oe.outbound_routing_group_id); return hash; } diff --git a/meta/SaiSerialize.cpp b/meta/SaiSerialize.cpp index 3d9605ad5..53960a001 100644 --- a/meta/SaiSerialize.cpp +++ b/meta/SaiSerialize.cpp @@ -1822,8 +1822,8 @@ std::string sai_serialize_outbound_routing_entry( json j; j["switch_id"] = sai_serialize_object_id(outbound_routing_entry.switch_id); - j["eni_id"] = sai_serialize_object_id(outbound_routing_entry.eni_id); j["destination"] = sai_serialize_ip_prefix(outbound_routing_entry.destination); + j["outbound_routing_group_id"] = sai_serialize_object_id(outbound_routing_entry.outbound_routing_group_id); return j.dump(); } @@ -4703,8 +4703,8 @@ void sai_deserialize_outbound_routing_entry( json j = json::parse(s); sai_deserialize_object_id(j["switch_id"], outbound_routing_entry.switch_id); - sai_deserialize_object_id(j["eni_id"], outbound_routing_entry.eni_id); sai_deserialize_ip_prefix(j["destination"], outbound_routing_entry.destination); + sai_deserialize_object_id(j["outbound_routing_group_id"], outbound_routing_entry.outbound_routing_group_id); } void sai_deserialize_outbound_ca_to_pa_entry( diff --git a/saiplayer/SaiPlayer.cpp b/saiplayer/SaiPlayer.cpp index 51b5cf13f..915c0e10c 100644 --- a/saiplayer/SaiPlayer.cpp +++ b/saiplayer/SaiPlayer.cpp @@ -880,7 +880,7 @@ sai_status_t SaiPlayer::handle_dash_outbound_routing( sai_deserialize_outbound_routing_entry(str_object_id, entry); entry.switch_id = translate_local_to_redis(entry.switch_id); - entry.eni_id = translate_local_to_redis(entry.eni_id); + entry.outbound_routing_group_id = translate_local_to_redis(entry.outbound_routing_group_id); switch (api) { @@ -1796,7 +1796,7 @@ sai_status_t SaiPlayer::handle_bulk_entry( sai_deserialize_outbound_routing_entry(object_ids[it], entries[it]); entries[it].switch_id = translate_local_to_redis(entries[it].switch_id); - entries[it].eni_id = translate_local_to_redis(entries[it].eni_id); + entries[it].outbound_routing_group_id = translate_local_to_redis(entries[it].outbound_routing_group_id); } CALL_BULK_CREATE_API_WITH_TIMER("outbound_routing_entry"); @@ -1991,7 +1991,7 @@ sai_status_t SaiPlayer::handle_bulk_entry( sai_deserialize_outbound_routing_entry(object_ids[it], entries[it]); entries[it].switch_id = translate_local_to_redis(entries[it].switch_id); - entries[it].eni_id = translate_local_to_redis(entries[it].eni_id); + entries[it].outbound_routing_group_id = translate_local_to_redis(entries[it].outbound_routing_group_id); } CALL_BULK_REMOVE_API_WITH_TIMER("outbound_routing_entry"); @@ -2193,7 +2193,7 @@ sai_status_t SaiPlayer::handle_bulk_entry( sai_deserialize_outbound_routing_entry(object_ids[it], entries[it]); entries[it].switch_id = translate_local_to_redis(entries[it].switch_id); - entries[it].eni_id = translate_local_to_redis(entries[it].eni_id); + entries[it].outbound_routing_group_id = translate_local_to_redis(entries[it].outbound_routing_group_id); } CALL_BULK_SET_API_WITH_TIMER("outbound_routing_entry"); diff --git a/syncd/SwitchNotifications.h b/syncd/SwitchNotifications.h index 2921a9cc1..6901855a7 100644 --- a/syncd/SwitchNotifications.h +++ b/syncd/SwitchNotifications.h @@ -118,6 +118,7 @@ namespace syncd .on_switch_asic_sdk_health_event = &Slot::onSwitchAsicSdkHealthEvent, .on_port_host_tx_ready = &Slot::onPortHostTxReady, .on_twamp_session_event = &Slot::onTwampSessionEvent, + .on_icmp_echo_session_state_change = nullptr, .on_ha_set_event = nullptr, .on_ha_scope_event = nullptr, }) { } diff --git a/syncd/Syncd.cpp b/syncd/Syncd.cpp index 9e2cd1971..c755b5b18 100644 --- a/syncd/Syncd.cpp +++ b/syncd/Syncd.cpp @@ -1239,7 +1239,7 @@ sai_status_t Syncd::processBulkCreateEntry( sai_deserialize_outbound_routing_entry(objectIds[it], entries[it]); entries[it].switch_id = m_translator->translateVidToRid(entries[it].switch_id); - entries[it].eni_id = m_translator->translateVidToRid(entries[it].eni_id); + entries[it].outbound_routing_group_id = m_translator->translateVidToRid(entries[it].outbound_routing_group_id); } status = m_vendorSai->bulkCreate( @@ -1525,7 +1525,7 @@ sai_status_t Syncd::processBulkRemoveEntry( sai_deserialize_outbound_routing_entry(objectIds[it], entries[it]); entries[it].switch_id = m_translator->translateVidToRid(entries[it].switch_id); - entries[it].eni_id = m_translator->translateVidToRid(entries[it].eni_id); + entries[it].outbound_routing_group_id = m_translator->translateVidToRid(entries[it].outbound_routing_group_id); } status = m_vendorSai->bulkRemove( diff --git a/syncd/tests/TestSyncdNvdaBf.cpp b/syncd/tests/TestSyncdNvdaBf.cpp index f86ba08a9..f2776d5de 100644 --- a/syncd/tests/TestSyncdNvdaBf.cpp +++ b/syncd/tests/TestSyncdNvdaBf.cpp @@ -239,6 +239,28 @@ void SyncdNvdaBfTest::RemoveEni(sai_object_id_t eni) EXPECT_EQ(SAI_STATUS_SUCCESS, m_sairedis->remove((sai_object_type_t)SAI_OBJECT_TYPE_ENI, eni)); } +sai_object_id_t SyncdNvdaBfTest::CreateOutboundRoutingGroup(bool disabled) +{ + SWSS_LOG_ENTER(); + + sai_object_id_t oid; + sai_attribute_t attr; + + attr.id = SAI_OUTBOUND_ROUTING_GROUP_ATTR_DISABLED; + attr.value.booldata = disabled; + + EXPECT_EQ(SAI_STATUS_SUCCESS, m_sairedis->create((sai_object_type_t)SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP, &oid, m_switchId, 1, &attr)); + + return oid; +} + +void SyncdNvdaBfTest::RemoveOutboundRoutingGroup(sai_object_id_t outbound_routing_group) +{ + SWSS_LOG_ENTER(); + + EXPECT_EQ(SAI_STATUS_SUCCESS, m_sairedis->remove((sai_object_type_t)SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP, outbound_routing_group)); +} + TEST_F(SyncdNvdaBfTest, dashDirectionLookup) { sai_attribute_t attr; @@ -1100,7 +1122,7 @@ TEST_F(SyncdNvdaBfTest, dashOutboundRoutingEntry) sai_object_id_t counter = CreateCounter(); sai_object_id_t vnet = CreateVnet(101); - sai_object_id_t eni = CreateEni(vnet); + sai_object_id_t outbound_routing_group = CreateOutboundRoutingGroup(false); sai_ip_address_t oip6; oip6.addr_family = SAI_IP_ADDR_FAMILY_IPV6; @@ -1108,7 +1130,7 @@ TEST_F(SyncdNvdaBfTest, dashOutboundRoutingEntry) sai_outbound_routing_entry_t entry0; entry0.switch_id = m_switchId; - entry0.eni_id = eni; + entry0.outbound_routing_group_id = outbound_routing_group; entry0.destination.addr_family = SAI_IP_ADDR_FAMILY_IPV4; inet_pton(AF_INET, "192.168.1.0", &entry0.destination.addr.ip4); inet_pton(AF_INET, "255.255.255.0", &entry0.destination.mask.ip4); @@ -1140,7 +1162,7 @@ TEST_F(SyncdNvdaBfTest, dashOutboundRoutingEntry) EXPECT_EQ(SAI_STATUS_SUCCESS, m_sairedis->remove(&entry0)); - RemoveEni(eni); + RemoveOutboundRoutingGroup(outbound_routing_group); RemoveVnet(vnet); RemoveCounter(counter); } @@ -1161,8 +1183,8 @@ TEST_F(SyncdNvdaBfTest, dashOutboundRoutingEntryBulk) sai_object_id_t vnet0 = CreateVnet(101); sai_object_id_t vnet1 = CreateVnet(102); - sai_object_id_t eni0 = CreateEni(vnet0); - sai_object_id_t eni1 = CreateEni(vnet1); + sai_object_id_t outbound_routing_group0 = CreateOutboundRoutingGroup(false); + sai_object_id_t outbound_routing_group1 = CreateOutboundRoutingGroup(false); sai_ip_prefix_t dst0 = {}; sai_ip_prefix_t dst1 = {}; @@ -1196,8 +1218,8 @@ TEST_F(SyncdNvdaBfTest, dashOutboundRoutingEntryBulk) sai_status_t statuses[entries_count] = {}; sai_outbound_routing_entry_t entries[entries_count] = { - { .switch_id = m_switchId, .eni_id = eni0, .destination = dst0}, - { .switch_id = m_switchId, .eni_id = eni1, .destination = dst1}, + { .switch_id = m_switchId, .destination = dst0, .outbound_routing_group_id = outbound_routing_group0}, + { .switch_id = m_switchId, .destination = dst1, .outbound_routing_group_id = outbound_routing_group1}, }; EXPECT_EQ(SAI_STATUS_SUCCESS, m_sairedis->bulkCreate(entries_count, entries, attr_count, attr_list, SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR, statuses)); @@ -1210,8 +1232,8 @@ TEST_F(SyncdNvdaBfTest, dashOutboundRoutingEntryBulk) EXPECT_EQ(SAI_STATUS_SUCCESS, statuses[i]); } - RemoveEni(eni0); - RemoveEni(eni1); + RemoveOutboundRoutingGroup(outbound_routing_group0); + RemoveOutboundRoutingGroup(outbound_routing_group1); RemoveVnet(vnet0); RemoveVnet(vnet1); RemoveCounter(counter0); diff --git a/syncd/tests/TestSyncdNvdaBf.h b/syncd/tests/TestSyncdNvdaBf.h index fa8e547b9..65c79107e 100644 --- a/syncd/tests/TestSyncdNvdaBf.h +++ b/syncd/tests/TestSyncdNvdaBf.h @@ -39,6 +39,9 @@ class SyncdNvdaBfTest : public ::testing::Test sai_object_id_t CreateEni(sai_object_id_t vnet); void RemoveEni(sai_object_id_t eni); + sai_object_id_t CreateOutboundRoutingGroup(bool disabled); + void RemoveOutboundRoutingGroup(sai_object_id_t outbound_routing_group); + protected: std::shared_ptr m_worker; std::shared_ptr m_sairedis; diff --git a/tests/NVDAMBF2H536C/dashapis.rec b/tests/NVDAMBF2H536C/dashapis.rec index cd6d2dd68..878dc162b 100644 --- a/tests/NVDAMBF2H536C/dashapis.rec +++ b/tests/NVDAMBF2H536C/dashapis.rec @@ -112,21 +112,21 @@ 2022-11-17.15:01:04.231296|r|SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY:{"sip":"192.3.3.3","switch_id":"oid:0x21000000000000","vnet_id":"oid:0x0e00800000007e"} 2022-11-17.15:01:04.231665|r|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000007e 2022-11-17.15:01:04.232160|c|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000007f|SAI_VNET_ATTR_VNI=101 -2022-11-17.15:01:04.232663|c|SAI_OBJECT_TYPE_ENI:oid:0x07008000000080|SAI_ENI_ATTR_VNET_ID=oid:0x0e00800000007f -2022-11-17.15:01:04.233159|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e00800000007f -2022-11-17.15:01:04.233627|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 +2022-11-17.15:01:04.232663|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP:oid:0x14008000000080|SAI_OUTBOUND_ROUTING_GROUP_ATTR_DISABLED=false +2022-11-17.15:01:04.233159|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","outbound_routing_group_id":"oid:0x14008000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e00800000007f +2022-11-17.15:01:04.233627|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","outbound_routing_group_id":"oid:0x14008000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 2022-11-17.15:01:04.234212|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e00800000007f -2022-11-17.15:01:04.234260|s|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_DIRECT -2022-11-17.15:01:04.234724|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 +2022-11-17.15:01:04.234260|s|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","outbound_routing_group_id":"oid:0x14008000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_DIRECT +2022-11-17.15:01:04.234724|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","outbound_routing_group_id":"oid:0x14008000000080","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 2022-11-17.15:01:04.235311|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_DIRECT|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e00800000007f -2022-11-17.15:01:04.235346|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000080","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.235726|r|SAI_OBJECT_TYPE_ENI:oid:0x07008000000080 +2022-11-17.15:01:04.235346|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","outbound_routing_group_id":"oid:0x14008000000080","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.235726|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP:oid:0x14008000000080 2022-11-17.15:01:04.236151|r|SAI_OBJECT_TYPE_VNET:oid:0x0e00800000007f 2022-11-17.15:01:04.236650|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000081|SAI_VNET_ATTR_VNI=101 -2022-11-17.15:01:04.237179|c|SAI_OBJECT_TYPE_ENI:oid:0x07008000000082|SAI_ENI_ATTR_VNET_ID=oid:0x0e008000000081 -2022-11-17.15:01:04.237663|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000082","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e008000000081 -2022-11-17.15:01:04.238082|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","eni_id":"oid:0x07008000000082","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.238459|r|SAI_OBJECT_TYPE_ENI:oid:0x07008000000082 +2022-11-17.15:01:04.237179|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP:oid:0x14008000000082|SAI_OUTBOUND_ROUTING_GROUP_ATTR_DISABLED=false +2022-11-17.15:01:04.237663|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","outbound_routing_group_id":"oid:0x14008000000082","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e008000000081 +2022-11-17.15:01:04.238082|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.168.1.0/24","outbound_routing_group_id":"oid:0x14008000000082","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.238459|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP:oid:0x14008000000082 2022-11-17.15:01:04.238878|r|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000081 2022-11-17.15:01:04.239377|c|SAI_OBJECT_TYPE_VNET:oid:0x0e008000000083|SAI_VNET_ATTR_VNI=10 2022-11-17.15:01:04.239866|c|SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY:{"dip":"192.168.0.1","dst_vnet_id":"oid:0x0e008000000083","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP=192.168.0.1|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC=00:01:02:03:04:05|SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI=false @@ -272,26 +272,26 @@ 2022-11-17.15:01:04.301434|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000ae 2022-11-17.15:01:04.301926|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000af|SAI_VNET_ATTR_VNI=101 2022-11-17.15:01:04.302418|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b0|SAI_VNET_ATTR_VNI=102 -2022-11-17.15:01:04.302911|c|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b1|SAI_ENI_ATTR_VNET_ID=oid:0x0e0080000000af -2022-11-17.15:01:04.303405|c|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b2|SAI_ENI_ATTR_VNET_ID=oid:0x0e0080000000b0 -2022-11-17.15:01:04.303897|C|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","eni_id":"oid:0x070080000000b1","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000af||{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x070080000000b2","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000b0 -2022-11-17.15:01:04.304429|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.1.1.1/24","eni_id":"oid:0x070080000000b1","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 +2022-11-17.15:01:04.302911|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP:oid:0x140080000000b1|SAI_OUTBOUND_ROUTING_GROUP_ATTR_DISABLED=false +2022-11-17.15:01:04.303405|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP:oid:0x140080000000b2|SAI_OUTBOUND_ROUTING_GROUP_ATTR_DISABLED=false +2022-11-17.15:01:04.303897|C|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","outbound_routing_group_id":"oid:0x140080000000b1","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000af||{"destination":"fe80::886a:feff:fe31:bfe0/32","outbound_routing_group_id":"oid:0x140080000000b2","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000b0 +2022-11-17.15:01:04.304429|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"192.1.1.1/24","outbound_routing_group_id":"oid:0x140080000000b1","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 2022-11-17.15:01:04.305140|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000af -2022-11-17.15:01:04.305194|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x070080000000b2","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 +2022-11-17.15:01:04.305194|g|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY:{"destination":"fe80::886a:feff:fe31:bfe0/32","outbound_routing_group_id":"oid:0x140080000000b2","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0 2022-11-17.15:01:04.305774|G|SAI_STATUS_SUCCESS|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000b0 -2022-11-17.15:01:04.305822|R|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","eni_id":"oid:0x070080000000b1","switch_id":"oid:0x21000000000000"}||{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x070080000000b2","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.306284|r|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b1 -2022-11-17.15:01:04.306706|r|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b2 +2022-11-17.15:01:04.305822|R|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","outbound_routing_group_id":"oid:0x140080000000b1","switch_id":"oid:0x21000000000000"}||{"destination":"fe80::886a:feff:fe31:bfe0/32","outbound_routing_group_id":"oid:0x140080000000b2","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.306284|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP:oid:0x140080000000b1 +2022-11-17.15:01:04.306706|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP:oid:0x140080000000b2 2022-11-17.15:01:04.307119|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000af 2022-11-17.15:01:04.307526|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b0 2022-11-17.15:01:04.308017|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b3|SAI_VNET_ATTR_VNI=101 2022-11-17.15:01:04.308505|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b4|SAI_VNET_ATTR_VNI=102 -2022-11-17.15:01:04.309013|c|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b5|SAI_ENI_ATTR_VNET_ID=oid:0x0e0080000000b3 -2022-11-17.15:01:04.309511|c|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b6|SAI_ENI_ATTR_VNET_ID=oid:0x0e0080000000b4 -2022-11-17.15:01:04.310006|C|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","eni_id":"oid:0x070080000000b5","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000b3||{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x070080000000b6","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000b4 -2022-11-17.15:01:04.310513|R|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","eni_id":"oid:0x070080000000b5","switch_id":"oid:0x21000000000000"}||{"destination":"fe80::886a:feff:fe31:bfe0/32","eni_id":"oid:0x070080000000b6","switch_id":"oid:0x21000000000000"} -2022-11-17.15:01:04.311049|r|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b5 -2022-11-17.15:01:04.311483|r|SAI_OBJECT_TYPE_ENI:oid:0x070080000000b6 +2022-11-17.15:01:04.309013|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP:oid:0x140080000000b5|SAI_OUTBOUND_ROUTING_GROUP_ATTR_DISABLED=false +2022-11-17.15:01:04.309511|c|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP:oid:0x140080000000b6|SAI_OUTBOUND_ROUTING_GROUP_ATTR_DISABLED=false +2022-11-17.15:01:04.310006|C|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","outbound_routing_group_id":"oid:0x140080000000b5","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000b3||{"destination":"fe80::886a:feff:fe31:bfe0/32","outbound_routing_group_id":"oid:0x140080000000b6","switch_id":"oid:0x21000000000000"}|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET|SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID=oid:0x0e0080000000b4 +2022-11-17.15:01:04.310513|R|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY||{"destination":"192.1.1.1/24","outbound_routing_group_id":"oid:0x140080000000b5","switch_id":"oid:0x21000000000000"}||{"destination":"fe80::886a:feff:fe31:bfe0/32","outbound_routing_group_id":"oid:0x140080000000b6","switch_id":"oid:0x21000000000000"} +2022-11-17.15:01:04.311049|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP:oid:0x140080000000b5 +2022-11-17.15:01:04.311483|r|SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP:oid:0x140080000000b6 2022-11-17.15:01:04.311891|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b3 2022-11-17.15:01:04.312295|r|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b4 2022-11-17.15:01:04.312788|c|SAI_OBJECT_TYPE_VNET:oid:0x0e0080000000b7|SAI_VNET_ATTR_VNI=10 diff --git a/tests/TestDash.cpp b/tests/TestDash.cpp index 49da8e510..623d64712 100644 --- a/tests/TestDash.cpp +++ b/tests/TestDash.cpp @@ -1276,12 +1276,10 @@ TEST(API, outbound_routing_entry) auto switchid = TestDashEnv::instance()->getSwitchOid(); - sai_dash_eni_api_t *dash_eni_api = nullptr; sai_dash_vnet_api_t *dash_vnet_api = nullptr; sai_counter_api_t *counter_api = nullptr; sai_dash_outbound_routing_api_t *dash_api = nullptr; - ASSERT_SUCCESS(sai_api_query((sai_api_t)SAI_API_DASH_ENI, (void**)&dash_eni_api)); ASSERT_SUCCESS(sai_api_query((sai_api_t)SAI_API_DASH_VNET, (void**)&dash_vnet_api)); ASSERT_SUCCESS(sai_api_query((sai_api_t)SAI_API_COUNTER, (void**)&counter_api)); ASSERT_SUCCESS(sai_api_query((sai_api_t)SAI_API_DASH_OUTBOUND_ROUTING, (void**)&dash_api)); @@ -1290,14 +1288,14 @@ TEST(API, outbound_routing_entry) ASSERT_SUCCESS(counter_api->create_counter(&counter, switchid, 0, nullptr)); sai_attribute_t attr; - sai_object_id_t eni, vnet; + sai_object_id_t outbound_routing_group, vnet; attr.id = SAI_VNET_ATTR_VNI; attr.value.u32 = 101; ASSERT_SUCCESS(dash_vnet_api->create_vnet(&vnet, switchid, 1, &attr)); - attr.id = SAI_ENI_ATTR_VNET_ID; - attr.value.oid = vnet; - ASSERT_SUCCESS(dash_eni_api->create_eni(&eni, switchid, 1, &attr)); + attr.id = SAI_OUTBOUND_ROUTING_GROUP_ATTR_DISABLED; + attr.value.booldata = false; + ASSERT_SUCCESS(dash_api->create_outbound_routing_group(&outbound_routing_group, switchid, 1, &attr)); sai_ip_address_t oip6; oip6.addr_family = SAI_IP_ADDR_FAMILY_IPV6; @@ -1305,7 +1303,7 @@ TEST(API, outbound_routing_entry) sai_outbound_routing_entry_t entry0; entry0.switch_id = switchid; - entry0.eni_id = eni; + entry0.outbound_routing_group_id = outbound_routing_group; entry0.destination.addr_family = SAI_IP_ADDR_FAMILY_IPV4; inet_pton(AF_INET, "192.168.1.0", &entry0.destination.addr.ip4); inet_pton(AF_INET, "255.255.255.0", &entry0.destination.mask.ip4); @@ -1343,7 +1341,7 @@ TEST(API, outbound_routing_entry) ASSERT_SUCCESS(dash_api->remove_outbound_routing_entry(&entry0)); - ASSERT_SUCCESS(dash_eni_api->remove_eni(eni)); + ASSERT_SUCCESS(dash_api->remove_outbound_routing_group(outbound_routing_group)); ASSERT_SUCCESS(dash_vnet_api->remove_vnet(vnet)); ASSERT_SUCCESS(counter_api->remove_counter(counter)); } @@ -1357,12 +1355,10 @@ TEST(APIBulk, outbound_routing_entry) const uint32_t entries_count = 2; const uint32_t entry_attrs_count = 4; - sai_dash_eni_api_t *dash_eni_api = nullptr; sai_dash_outbound_routing_api_t *dash_api = nullptr; sai_counter_api_t *counter_api = nullptr; sai_dash_vnet_api_t *dash_vnet_api = nullptr; - ASSERT_SUCCESS(sai_api_query((sai_api_t)SAI_API_DASH_ENI, (void**)&dash_eni_api)); ASSERT_SUCCESS(sai_api_query((sai_api_t)SAI_API_DASH_VNET, (void**)&dash_vnet_api)); ASSERT_SUCCESS(sai_api_query((sai_api_t)SAI_API_COUNTER, (void**)&counter_api)); ASSERT_SUCCESS(sai_api_query((sai_api_t)SAI_API_DASH_OUTBOUND_ROUTING, (void**)&dash_api)); @@ -1379,7 +1375,7 @@ TEST(APIBulk, outbound_routing_entry) sai_attribute_t attr; sai_object_id_t vnet0, vnet1; - sai_object_id_t eni0, eni1; + sai_object_id_t outbound_routing_group0, outbound_routing_group1; attr.id = SAI_VNET_ATTR_VNI; attr.value.u32 = 101; ASSERT_SUCCESS(dash_vnet_api->create_vnet(&vnet0, switchid, 1, &attr)); @@ -1388,13 +1384,13 @@ TEST(APIBulk, outbound_routing_entry) attr.value.u32 = 102; ASSERT_SUCCESS(dash_vnet_api->create_vnet(&vnet1, switchid, 1, &attr)); - attr.id = SAI_ENI_ATTR_VNET_ID; - attr.value.oid = vnet0; - ASSERT_SUCCESS(dash_eni_api->create_eni(&eni0, switchid, 1, &attr)); + attr.id = SAI_OUTBOUND_ROUTING_GROUP_ATTR_DISABLED; + attr.value.booldata = false; + ASSERT_SUCCESS(dash_api->create_outbound_routing_group(&outbound_routing_group0, switchid, 1, &attr)); - attr.id = SAI_ENI_ATTR_VNET_ID; - attr.value.oid = vnet1; - ASSERT_SUCCESS(dash_eni_api->create_eni(&eni1, switchid, 1, &attr)); + attr.id = SAI_OUTBOUND_ROUTING_GROUP_ATTR_DISABLED; + attr.value.booldata = false; + ASSERT_SUCCESS(dash_api->create_outbound_routing_group(&outbound_routing_group1, switchid, 1, &attr)); sai_ip_prefix_t dst0 = {}; sai_ip_prefix_t dst1 = {}; @@ -1428,8 +1424,8 @@ TEST(APIBulk, outbound_routing_entry) sai_status_t statuses[entries_count] = {}; sai_outbound_routing_entry_t entries[entries_count] = { - { .switch_id = switchid, .eni_id = eni0, .destination = dst0}, - { .switch_id = switchid, .eni_id = eni1, .destination = dst1}, + { .switch_id = switchid, .destination = dst0, .outbound_routing_group_id = outbound_routing_group0}, + { .switch_id = switchid, .destination = dst0, .outbound_routing_group_id = outbound_routing_group1}, }; ASSERT_SUCCESS(dash_api->create_outbound_routing_entries(entries_count, entries, attr_count, attr_list, SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR, statuses)); @@ -1457,8 +1453,8 @@ TEST(APIBulk, outbound_routing_entry) ASSERT_SUCCESS(statuses[i]); } - ASSERT_SUCCESS(dash_eni_api->remove_eni(eni0)); - ASSERT_SUCCESS(dash_eni_api->remove_eni(eni1)); + ASSERT_SUCCESS(dash_api->remove_outbound_routing_group(outbound_routing_group0)); + ASSERT_SUCCESS(dash_api->remove_outbound_routing_group(outbound_routing_group1)); ASSERT_SUCCESS(dash_vnet_api->remove_vnet(vnet0)); ASSERT_SUCCESS(dash_vnet_api->remove_vnet(vnet1)); ASSERT_SUCCESS(counter_api->remove_counter(counter0)); diff --git a/unittest/meta/TestMetaDash.cpp b/unittest/meta/TestMetaDash.cpp index b7b4234d1..d7bc7b037 100644 --- a/unittest/meta/TestMetaDash.cpp +++ b/unittest/meta/TestMetaDash.cpp @@ -138,6 +138,28 @@ static void remove_eni(Meta &m, sai_object_id_t eni) EXPECT_EQ(SAI_STATUS_SUCCESS, m.remove((sai_object_type_t)SAI_OBJECT_TYPE_ENI, eni)); } +static sai_object_id_t create_outbound_routing_group(Meta &m, sai_object_id_t switchid, bool disabled) +{ + SWSS_LOG_ENTER(); + + sai_object_id_t oid; + sai_attribute_t attr; + + attr.id = SAI_OUTBOUND_ROUTING_GROUP_ATTR_DISABLED; + attr.value.booldata = disabled; + + EXPECT_EQ(SAI_STATUS_SUCCESS, m.create((sai_object_type_t)SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP, &oid, switchid, 1, &attr)); + + return oid; +} + +static void remove_outbound_routing_group(Meta &m, sai_object_id_t outbound_routing_group) +{ + SWSS_LOG_ENTER(); + + EXPECT_EQ(SAI_STATUS_SUCCESS, m.remove((sai_object_type_t)SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP, outbound_routing_group)); +} + TEST(Meta, dash_get_availability) { Meta m(std::make_shared()); @@ -1105,7 +1127,7 @@ TEST(Meta, quad_dash_outbound_routing_entry) sai_object_id_t counter = create_counter(m, switchid); sai_object_id_t vnet = create_vnet(m, switchid, 101); - sai_object_id_t eni = create_eni(m, switchid, vnet); + sai_object_id_t outbound_routing_group = create_outbound_routing_group(m, switchid, false); sai_ip_address_t oip6; oip6.addr_family = SAI_IP_ADDR_FAMILY_IPV6; @@ -1113,7 +1135,7 @@ TEST(Meta, quad_dash_outbound_routing_entry) sai_outbound_routing_entry_t entry0; entry0.switch_id = switchid; - entry0.eni_id = eni; + entry0.outbound_routing_group_id = outbound_routing_group; entry0.destination.addr_family = SAI_IP_ADDR_FAMILY_IPV4; inet_pton(AF_INET, "192.168.1.0", &entry0.destination.addr.ip4); inet_pton(AF_INET, "255.255.255.0", &entry0.destination.mask.ip4); @@ -1145,7 +1167,7 @@ TEST(Meta, quad_dash_outbound_routing_entry) EXPECT_EQ(SAI_STATUS_SUCCESS, m.remove(&entry0)); - remove_eni(m, eni); + remove_outbound_routing_group(m, outbound_routing_group); remove_vnet(m, vnet); remove_counter(m, counter); } @@ -1170,8 +1192,8 @@ TEST(Meta, bulk_dash_outbound_routing_entry) sai_object_id_t vnet0 = create_vnet(m, switchid, 101); sai_object_id_t vnet1 = create_vnet(m, switchid, 102); - sai_object_id_t eni0 = create_eni(m, switchid, vnet0); - sai_object_id_t eni1 = create_eni(m, switchid, vnet1); + sai_object_id_t outbound_routing_group0 = create_outbound_routing_group(m, switchid, false); + sai_object_id_t outbound_routing_group1 = create_outbound_routing_group(m, switchid, false); sai_ip_prefix_t dst0 = {}; sai_ip_prefix_t dst1 = {}; @@ -1205,8 +1227,8 @@ TEST(Meta, bulk_dash_outbound_routing_entry) sai_status_t statuses[entries_count] = {}; sai_outbound_routing_entry_t entries[entries_count] = { - { .switch_id = switchid, .eni_id = eni0, .destination = dst0}, - { .switch_id = switchid, .eni_id = eni1, .destination = dst1}, + { .switch_id = switchid, .destination = dst0, .outbound_routing_group_id = outbound_routing_group0}, + { .switch_id = switchid, .destination = dst1, .outbound_routing_group_id = outbound_routing_group1}, }; EXPECT_EQ(SAI_STATUS_SUCCESS, m.bulkCreate(entries_count, entries, attr_count, attr_list, SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR, statuses)); @@ -1219,8 +1241,8 @@ TEST(Meta, bulk_dash_outbound_routing_entry) EXPECT_EQ(SAI_STATUS_SUCCESS, statuses[i]); } - remove_eni(m, eni0); - remove_eni(m, eni1); + remove_outbound_routing_group(m, outbound_routing_group0); + remove_outbound_routing_group(m, outbound_routing_group1); remove_vnet(m, vnet0); remove_vnet(m, vnet1); remove_counter(m, counter0); diff --git a/unittest/syncd/TestVendorSai.cpp b/unittest/syncd/TestVendorSai.cpp index 10a0c1356..d369d40e9 100644 --- a/unittest/syncd/TestVendorSai.cpp +++ b/unittest/syncd/TestVendorSai.cpp @@ -377,6 +377,28 @@ static void remove_eni(VendorSai &sai, sai_object_id_t eni) EXPECT_EQ(SAI_STATUS_SUCCESS, sai.remove((sai_object_type_t)SAI_OBJECT_TYPE_ENI, eni)); } +static sai_object_id_t create_outbound_routing_group(VendorSai &sai, sai_object_id_t switchid, bool disabled) +{ + SWSS_LOG_ENTER(); + + sai_object_id_t oid; + sai_attribute_t attr; + + attr.id = SAI_OUTBOUND_ROUTING_GROUP_ATTR_DISABLED; + attr.value.booldata = disabled; + + EXPECT_EQ(SAI_STATUS_SUCCESS, sai.create((sai_object_type_t)SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP, &oid, switchid, 1, &attr)); + + return oid; +} + +static void remove_outbound_routing_group(VendorSai &sai, sai_object_id_t outbound_routing_group) +{ + SWSS_LOG_ENTER(); + + EXPECT_EQ(SAI_STATUS_SUCCESS, sai.remove((sai_object_type_t)SAI_OBJECT_TYPE_OUTBOUND_ROUTING_GROUP, outbound_routing_group)); +} + TEST(VendorSai, quad_dash_direction_lookup) { VendorSai sai; @@ -1172,7 +1194,7 @@ TEST(VendorSai, quad_dash_outbound_routing_entry) sai_object_id_t counter = create_counter(sai, switchid); sai_object_id_t vnet = create_vnet(sai, switchid, 101); - sai_object_id_t eni = create_eni(sai, switchid, vnet); + sai_object_id_t outbound_routing_group = create_outbound_routing_group(sai, switchid, false); sai_ip_address_t oip6; oip6.addr_family = SAI_IP_ADDR_FAMILY_IPV6; @@ -1180,7 +1202,7 @@ TEST(VendorSai, quad_dash_outbound_routing_entry) sai_outbound_routing_entry_t entry0; entry0.switch_id = switchid; - entry0.eni_id = eni; + entry0.outbound_routing_group_id = outbound_routing_group; entry0.destination.addr_family = SAI_IP_ADDR_FAMILY_IPV4; inet_pton(AF_INET, "192.168.1.0", &entry0.destination.addr.ip4); inet_pton(AF_INET, "255.255.255.0", &entry0.destination.mask.ip4); @@ -1202,7 +1224,7 @@ TEST(VendorSai, quad_dash_outbound_routing_entry) EXPECT_EQ(SAI_STATUS_SUCCESS, sai.remove(&entry0)); - remove_eni(sai, eni); + remove_outbound_routing_group(sai, outbound_routing_group); remove_vnet(sai, vnet); remove_counter(sai, counter); } @@ -1228,8 +1250,8 @@ TEST(VendorSai, bulk_dash_outbound_routing_entry) sai_object_id_t vnet0 = create_vnet(sai, switchid, 101); sai_object_id_t vnet1 = create_vnet(sai, switchid, 102); - sai_object_id_t eni0 = create_eni(sai, switchid, vnet0); - sai_object_id_t eni1 = create_eni(sai, switchid, vnet1); + sai_object_id_t outbound_routing_group0 = create_outbound_routing_group(sai, switchid, false); + sai_object_id_t outbound_routing_group1 = create_outbound_routing_group(sai, switchid, false); sai_ip_prefix_t dst0 = {}; sai_ip_prefix_t dst1 = {}; @@ -1263,8 +1285,8 @@ TEST(VendorSai, bulk_dash_outbound_routing_entry) sai_status_t statuses[entries_count] = {}; sai_outbound_routing_entry_t entries[entries_count] = { - { .switch_id = switchid, .eni_id = eni0, .destination = dst0}, - { .switch_id = switchid, .eni_id = eni1, .destination = dst1}, + { .switch_id = switchid, .destination = dst0, .outbound_routing_group_id = outbound_routing_group0}, + { .switch_id = switchid, .destination = dst1, .outbound_routing_group_id = outbound_routing_group1}, }; EXPECT_EQ(SAI_STATUS_SUCCESS, sai.bulkCreate(entries_count, entries, attr_count, attr_list, SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR, statuses)); @@ -1277,8 +1299,8 @@ TEST(VendorSai, bulk_dash_outbound_routing_entry) EXPECT_EQ(SAI_STATUS_SUCCESS, statuses[i]); } - remove_eni(sai, eni0); - remove_eni(sai, eni1); + remove_outbound_routing_group(sai, outbound_routing_group0); + remove_outbound_routing_group(sai, outbound_routing_group1); remove_vnet(sai, vnet0); remove_vnet(sai, vnet1); remove_counter(sai, counter0); From 9b9d3306080e25568dd89261de87beac01738a0a Mon Sep 17 00:00:00 2001 From: Vivek Date: Mon, 16 Sep 2024 17:00:21 -0500 Subject: [PATCH 3/3] Add support for DASH ENI Counters (#1418) * Add support for DASH ENI Counters * Fix whitespace error --- meta/SaiSerialize.cpp | 8 ++ meta/sai_serialize.h | 3 + syncd/FlexCounter.cpp | 39 ++++++++++ unittest/syncd/TestFlexCounter.cpp | 118 +++++++++++++++++++++-------- 4 files changed, 138 insertions(+), 30 deletions(-) diff --git a/meta/SaiSerialize.cpp b/meta/SaiSerialize.cpp index 53960a001..dd268f26a 100644 --- a/meta/SaiSerialize.cpp +++ b/meta/SaiSerialize.cpp @@ -1041,6 +1041,14 @@ std::string sai_serialize_buffer_pool_stat( return sai_serialize_enum(counter, &sai_metadata_enum_sai_buffer_pool_stat_t); } +std::string sai_serialize_eni_stat( + _In_ const sai_eni_stat_t counter) +{ + SWSS_LOG_ENTER(); + + return sai_serialize_enum(counter, &sai_metadata_enum_sai_eni_stat_t); +} + std::string sai_serialize_tunnel_stat( _In_ const sai_tunnel_stat_t counter) { diff --git a/meta/sai_serialize.h b/meta/sai_serialize.h index 5e149c409..d74d753e7 100644 --- a/meta/sai_serialize.h +++ b/meta/sai_serialize.h @@ -122,6 +122,9 @@ std::string sai_serialize_ingress_priority_group_attr( std::string sai_serialize_buffer_pool_stat( _In_ const sai_buffer_pool_stat_t counter); +std::string sai_serialize_eni_stat( + _In_ const sai_eni_stat_t counter); + std::string sai_serialize_tunnel_stat( _In_ const sai_tunnel_stat_t counter); diff --git a/syncd/FlexCounter.cpp b/syncd/FlexCounter.cpp index 4352efded..54443ed87 100644 --- a/syncd/FlexCounter.cpp +++ b/syncd/FlexCounter.cpp @@ -26,6 +26,7 @@ static const std::string COUNTER_TYPE_MACSEC_SA = "MACSEC SA Counter"; static const std::string COUNTER_TYPE_FLOW = "Flow Counter"; static const std::string COUNTER_TYPE_TUNNEL = "Tunnel Counter"; static const std::string COUNTER_TYPE_BUFFER_POOL = "Buffer Pool Counter"; +static const std::string COUNTER_TYPE_ENI = "DASH ENI Counter"; static const std::string ATTR_TYPE_QUEUE = "Queue Attribute"; static const std::string ATTR_TYPE_PG = "Priority Group Attribute"; static const std::string ATTR_TYPE_MACSEC_SA = "MACSEC SA Attribute"; @@ -219,6 +220,14 @@ std::string serializeStat( return sai_serialize_buffer_pool_stat(stat); } +template <> +std::string serializeStat( + _In_ const sai_eni_stat_t stat) +{ + SWSS_LOG_ENTER(); + return sai_serialize_eni_stat(stat); +} + template void deserializeStat( _In_ const char* name, @@ -318,6 +327,15 @@ void deserializeStat( sai_deserialize_buffer_pool_stat(name, stat); } +template <> +void deserializeStat( + _In_ const char* name, + _Out_ sai_eni_stat_t *stat) +{ + SWSS_LOG_ENTER(); + sai_deserialize_eni_stat(name, stat); +} + template void deserializeAttr( _In_ const std::string& name, @@ -1297,6 +1315,12 @@ std::shared_ptr FlexCounter::createCounterContext( context->always_check_supported_counters = true; return context; } + else if (context_name == COUNTER_TYPE_ENI) + { + auto context = std::make_shared>(context_name, (sai_object_type_t)SAI_OBJECT_TYPE_ENI, m_vendorSai.get(), m_statsMode); + context->always_check_supported_counters = true; + return context; + } else if (context_name == ATTR_TYPE_QUEUE) { return std::make_shared>(context_name, SAI_OBJECT_TYPE_QUEUE, m_vendorSai.get(), m_statsMode); @@ -1572,6 +1596,13 @@ void FlexCounter::removeCounter( getCounterContext(COUNTER_TYPE_TUNNEL)->removeObject(vid); } } + else if (objectType == (sai_object_type_t)SAI_OBJECT_TYPE_ENI) + { + if (hasCounterContext(COUNTER_TYPE_ENI)) + { + getCounterContext(COUNTER_TYPE_ENI)->removeObject(vid); + } + } else if (objectType == SAI_OBJECT_TYPE_COUNTER) { if (hasCounterContext(COUNTER_TYPE_FLOW)) @@ -1730,6 +1761,14 @@ void FlexCounter::addCounter( idStrings, ""); } + else if (objectType == (sai_object_type_t)SAI_OBJECT_TYPE_ENI && field == ENI_COUNTER_ID_LIST) + { + getCounterContext(COUNTER_TYPE_ENI)->addObject( + vid, + rid, + idStrings, + ""); + } else { SWSS_LOG_ERROR("Object type and field combination is not supported, object type %s, field %s", diff --git a/unittest/syncd/TestFlexCounter.cpp b/unittest/syncd/TestFlexCounter.cpp index 482fc6c1c..1e81e3458 100644 --- a/unittest/syncd/TestFlexCounter.cpp +++ b/unittest/syncd/TestFlexCounter.cpp @@ -1,10 +1,13 @@ #include "FlexCounter.h" #include "MockableSaiInterface.h" #include "MockHelper.h" - +#include "VirtualObjectIdManager.h" +#include "NumberOidIndexGenerator.h" +#include #include - +using namespace saimeta; +using namespace sairedis; using namespace syncd; using namespace std; @@ -39,8 +42,42 @@ std::string toOid(T value) std::shared_ptr sai(new MockableSaiInterface()); typedef std::function& counterIdNames, const std::vector& expectedValues)> VerifyStatsFunc; +std::vector generateOids( + unsigned int numOid, + sai_object_type_t object_type) +{ + SWSS_LOG_ENTER(); + + std::vector object_ids; + if (!numOid) + return object_ids; + + auto scc = std::make_shared(); + for (unsigned int i = 0; i < numOid; i++){ + auto hw_info = "asic" + std::to_string(i); + scc->insert(std::make_shared(i, hw_info)); + } + + auto vidManager = VirtualObjectIdManager(0, scc, std::make_shared()); + if (object_type == SAI_OBJECT_TYPE_SWITCH) + { + for (unsigned int i = 0; i < numOid; i++){ + auto hw_info = "asic" + std::to_string(i); + object_ids.push_back(vidManager.allocateNewSwitchObjectId(hw_info)); + } + } + else + { + auto sid = vidManager.allocateNewSwitchObjectId("asic0"); + for (unsigned int i = 0; i < numOid; i++){ + object_ids.push_back(vidManager.allocateNewObjectId(object_type, sid)); + } + } + return object_ids; +} + void testAddRemoveCounter( - const std::vector& object_ids, + unsigned int numOid, sai_object_type_t object_type, const std::string& counterIdFieldName, const std::vector& counterIdNames, @@ -55,6 +92,9 @@ void testAddRemoveCounter( test_syncd::mockVidManagerObjectTypeQuery(object_type); + std::vector object_ids = generateOids(numOid, object_type); + EXPECT_EQ(object_ids.size(), numOid); + std::vector values; values.emplace_back(POLL_INTERVAL_FIELD, "1000"); values.emplace_back(FLEX_COUNTER_STATUS_FIELD, "enable"); @@ -136,7 +176,7 @@ TEST(FlexCounter, addRemoveCounter) }; testAddRemoveCounter( - {sai_object_id_t(0x54000000000000)}, + 1, SAI_OBJECT_TYPE_COUNTER, FLOW_COUNTER_ID_LIST, {"SAI_COUNTER_STAT_PACKETS", "SAI_COUNTER_STAT_BYTES"}, @@ -145,7 +185,7 @@ TEST(FlexCounter, addRemoveCounter) true); testAddRemoveCounter( - {sai_object_id_t(0x5a000000000000)}, + 1, SAI_OBJECT_TYPE_MACSEC_FLOW, MACSEC_FLOW_COUNTER_ID_LIST, {"SAI_MACSEC_FLOW_STAT_CONTROL_PKTS", "SAI_MACSEC_FLOW_STAT_PKTS_UNTAGGED"}, @@ -154,7 +194,7 @@ TEST(FlexCounter, addRemoveCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x5c000000000000)}, + 1, SAI_OBJECT_TYPE_MACSEC_SA, MACSEC_SA_COUNTER_ID_LIST, {"SAI_MACSEC_SA_STAT_OCTETS_ENCRYPTED", "SAI_MACSEC_SA_STAT_OCTETS_PROTECTED"}, @@ -163,7 +203,7 @@ TEST(FlexCounter, addRemoveCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x1000000000000)}, + 1, SAI_OBJECT_TYPE_PORT, PORT_COUNTER_ID_LIST, {"SAI_PORT_STAT_IF_IN_OCTETS", "SAI_PORT_STAT_IF_IN_UCAST_PKTS"}, @@ -172,7 +212,7 @@ TEST(FlexCounter, addRemoveCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x1000000000000)}, + 1, SAI_OBJECT_TYPE_PORT, PORT_DEBUG_COUNTER_ID_LIST, {"SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_0_DROPPED_PKTS", "SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS"}, @@ -187,7 +227,7 @@ TEST(FlexCounter, addRemoveCounter) }; testAddRemoveCounter( - {sai_object_id_t(0x15000000000000)}, + 1, SAI_OBJECT_TYPE_QUEUE, QUEUE_COUNTER_ID_LIST, {"SAI_QUEUE_STAT_PACKETS", "SAI_QUEUE_STAT_BYTES"}, @@ -198,7 +238,7 @@ TEST(FlexCounter, addRemoveCounter) EXPECT_EQ(true, clearCalled); testAddRemoveCounter( - {sai_object_id_t(0x1a000000000000)}, + 1, SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP, PG_COUNTER_ID_LIST, {"SAI_INGRESS_PRIORITY_GROUP_STAT_PACKETS", "SAI_INGRESS_PRIORITY_GROUP_STAT_BYTES"}, @@ -207,7 +247,7 @@ TEST(FlexCounter, addRemoveCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x6000000000000)}, + 1, SAI_OBJECT_TYPE_ROUTER_INTERFACE, RIF_COUNTER_ID_LIST, {"SAI_ROUTER_INTERFACE_STAT_IN_OCTETS", "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS"}, @@ -216,7 +256,7 @@ TEST(FlexCounter, addRemoveCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x21000000000000)}, + 1, SAI_OBJECT_TYPE_SWITCH, SWITCH_DEBUG_COUNTER_ID_LIST, {"SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_0_DROPPED_PKTS", "SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS"}, @@ -225,7 +265,7 @@ TEST(FlexCounter, addRemoveCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x2a000000000000)}, + 1, SAI_OBJECT_TYPE_TUNNEL, TUNNEL_COUNTER_ID_LIST, {"SAI_TUNNEL_STAT_IN_OCTETS", "SAI_TUNNEL_STAT_IN_PACKETS"}, @@ -233,9 +273,18 @@ TEST(FlexCounter, addRemoveCounter) counterVerifyFunc, false); + testAddRemoveCounter( + 1, + (sai_object_type_t)SAI_OBJECT_TYPE_ENI, + ENI_COUNTER_ID_LIST, + {"SAI_ENI_STAT_FLOW_CREATED", "SAI_ENI_STAT_FLOW_CREATE_FAILED", "SAI_ENI_STAT_FLOW_DELETED", "SAI_ENI_STAT_FLOW_DELETE_FAILED"}, + {"100", "200", "300", "400"}, + counterVerifyFunc, + false); + clearCalled = false; testAddRemoveCounter( - {sai_object_id_t(0x18000000000000)}, + 1, SAI_OBJECT_TYPE_BUFFER_POOL, BUFFER_POOL_COUNTER_ID_LIST, {"SAI_BUFFER_POOL_STAT_CURR_OCCUPANCY_BYTES", "SAI_BUFFER_POOL_STAT_WATERMARK_BYTES"}, @@ -256,7 +305,7 @@ TEST(FlexCounter, addRemoveCounter) }; testAddRemoveCounter( - {sai_object_id_t(0x15000000000000)}, + 1, SAI_OBJECT_TYPE_QUEUE, QUEUE_ATTR_ID_LIST, {"SAI_QUEUE_ATTR_PAUSE_STATUS"}, @@ -276,7 +325,7 @@ TEST(FlexCounter, addRemoveCounter) }; testAddRemoveCounter( - {sai_object_id_t(0x1a000000000000)}, + 1, SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP, PG_ATTR_ID_LIST, {"SAI_INGRESS_PRIORITY_GROUP_ATTR_PORT"}, @@ -300,7 +349,7 @@ TEST(FlexCounter, addRemoveCounter) }; testAddRemoveCounter( - {sai_object_id_t(0x5c000000000000)}, + 1, SAI_OBJECT_TYPE_MACSEC_SA, MACSEC_SA_ATTR_ID_LIST, {"SAI_MACSEC_SA_ATTR_CONFIGURED_EGRESS_XPN", "SAI_MACSEC_SA_ATTR_AN"}, @@ -320,7 +369,7 @@ TEST(FlexCounter, addRemoveCounter) }; testAddRemoveCounter( - {sai_object_id_t(0x9000000000000)}, + 1, SAI_OBJECT_TYPE_ACL_COUNTER, ACL_COUNTER_ATTR_ID_LIST, {"SAI_ACL_COUNTER_ATTR_PACKETS"}, @@ -373,7 +422,7 @@ TEST(FlexCounter, queryCounterCapability) }; testAddRemoveCounter( - {sai_object_id_t(0x1000000000000)}, + 1, SAI_OBJECT_TYPE_PORT, PORT_COUNTER_ID_LIST, {"SAI_PORT_STAT_IF_IN_OCTETS", "SAI_PORT_STAT_IF_IN_UCAST_PKTS"}, @@ -586,7 +635,7 @@ TEST(FlexCounter, bulkCounter) }; testAddRemoveCounter( - {sai_object_id_t(0x54000000000000), sai_object_id_t(0x54000000000001)}, + 2, SAI_OBJECT_TYPE_COUNTER, FLOW_COUNTER_ID_LIST, {"SAI_COUNTER_STAT_PACKETS", "SAI_COUNTER_STAT_BYTES"}, @@ -595,7 +644,7 @@ TEST(FlexCounter, bulkCounter) true); testAddRemoveCounter( - {sai_object_id_t(0x5a000000000000), sai_object_id_t(0x5a000000000001)}, + 2, SAI_OBJECT_TYPE_MACSEC_FLOW, MACSEC_FLOW_COUNTER_ID_LIST, {"SAI_MACSEC_FLOW_STAT_CONTROL_PKTS", "SAI_MACSEC_FLOW_STAT_PKTS_UNTAGGED"}, @@ -604,7 +653,7 @@ TEST(FlexCounter, bulkCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x5c000000000000), sai_object_id_t(0x5c000000000001)}, + 2, SAI_OBJECT_TYPE_MACSEC_SA, MACSEC_SA_COUNTER_ID_LIST, {"SAI_MACSEC_SA_STAT_OCTETS_ENCRYPTED", "SAI_MACSEC_SA_STAT_OCTETS_PROTECTED"}, @@ -613,7 +662,7 @@ TEST(FlexCounter, bulkCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x1000000000000), sai_object_id_t(0x1000000000001)}, + 2, SAI_OBJECT_TYPE_PORT, PORT_COUNTER_ID_LIST, {"SAI_PORT_STAT_IF_IN_OCTETS", "SAI_PORT_STAT_IF_IN_UCAST_PKTS"}, @@ -622,7 +671,7 @@ TEST(FlexCounter, bulkCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x1000000000000), sai_object_id_t(0x1000000000001)}, + 2, SAI_OBJECT_TYPE_PORT, PORT_DEBUG_COUNTER_ID_LIST, {"SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_0_DROPPED_PKTS", "SAI_PORT_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS"}, @@ -631,7 +680,7 @@ TEST(FlexCounter, bulkCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x15000000000000), sai_object_id_t(0x15000000000001)}, + 2, SAI_OBJECT_TYPE_QUEUE, QUEUE_COUNTER_ID_LIST, {"SAI_QUEUE_STAT_PACKETS", "SAI_QUEUE_STAT_BYTES"}, @@ -642,7 +691,7 @@ TEST(FlexCounter, bulkCounter) EXPECT_EQ(true, clearCalled); testAddRemoveCounter( - {sai_object_id_t(0x1a000000000000), sai_object_id_t(0x1a000000000001)}, + 2, SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP, PG_COUNTER_ID_LIST, {"SAI_INGRESS_PRIORITY_GROUP_STAT_PACKETS", "SAI_INGRESS_PRIORITY_GROUP_STAT_BYTES"}, @@ -651,7 +700,7 @@ TEST(FlexCounter, bulkCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x6000000000000), sai_object_id_t(0x6000000000001)}, + 2, SAI_OBJECT_TYPE_ROUTER_INTERFACE, RIF_COUNTER_ID_LIST, {"SAI_ROUTER_INTERFACE_STAT_IN_OCTETS", "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS"}, @@ -660,7 +709,7 @@ TEST(FlexCounter, bulkCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x21000000000000), sai_object_id_t(0x21000000000001)}, + 2, SAI_OBJECT_TYPE_SWITCH, SWITCH_DEBUG_COUNTER_ID_LIST, {"SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_0_DROPPED_PKTS", "SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS"}, @@ -669,7 +718,7 @@ TEST(FlexCounter, bulkCounter) false); testAddRemoveCounter( - {sai_object_id_t(0x2a000000000000), sai_object_id_t(0x2a000000000001)}, + 2, SAI_OBJECT_TYPE_TUNNEL, TUNNEL_COUNTER_ID_LIST, {"SAI_TUNNEL_STAT_IN_OCTETS", "SAI_TUNNEL_STAT_IN_PACKETS"}, @@ -677,9 +726,18 @@ TEST(FlexCounter, bulkCounter) counterVerifyFunc, false); + testAddRemoveCounter( + 2, + (sai_object_type_t)SAI_OBJECT_TYPE_ENI, + ENI_COUNTER_ID_LIST, + {"SAI_ENI_STAT_FLOW_CREATED", "SAI_ENI_STAT_FLOW_CREATE_FAILED", "SAI_ENI_STAT_FLOW_DELETED", "SAI_ENI_STAT_FLOW_DELETE_FAILED"}, + {"100", "200", "300", "400"}, + counterVerifyFunc, + false); + clearCalled = false; testAddRemoveCounter( - {sai_object_id_t(0x18000000000000), sai_object_id_t(0x18000000000001)}, + 2, SAI_OBJECT_TYPE_BUFFER_POOL, BUFFER_POOL_COUNTER_ID_LIST, {"SAI_BUFFER_POOL_STAT_CURR_OCCUPANCY_BYTES", "SAI_BUFFER_POOL_STAT_WATERMARK_BYTES"},