Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 30 additions & 17 deletions orchagent/high_frequency_telemetry/hftelprofile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -706,25 +706,38 @@ sai_object_id_t HFTelProfile::getTAMTelTypeObjID(sai_object_type_t object_type)
attr.value.s32 = SAI_TAM_TELEMETRY_TYPE_COUNTER_SUBSCRIPTION;
attrs.push_back(attr);

attr.id = SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS;
attr.value.booldata = true;
attrs.push_back(attr);

attr.id = SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS_INGRESS;
attr.value.booldata = true;
attrs.push_back(attr);

attr.id = SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS_EGRESS;
attr.value.booldata = true;
attrs.push_back(attr);
if (object_type == SAI_OBJECT_TYPE_PORT)
{
attr.id = SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS;
attr.value.booldata = true;
attrs.push_back(attr);

attr.id = SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_MMU_STATS;
attr.value.booldata = true;
attrs.push_back(attr);
attr.id = SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS_INGRESS;
attr.value.booldata = true;
attrs.push_back(attr);

attr.id = SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_OUTPUT_QUEUE_STATS;
attr.value.booldata = true;
attrs.push_back(attr);
attr.id = SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS_EGRESS;
attr.value.booldata = true;
attrs.push_back(attr);
}
else if (object_type == SAI_OBJECT_TYPE_BUFFER_POOL ||
object_type == SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP)
{
attr.id = SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_MMU_STATS;
attr.value.booldata = true;
attrs.push_back(attr);
}
else if (object_type == SAI_OBJECT_TYPE_QUEUE)
{
attr.id = SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_OUTPUT_QUEUE_STATS;
attr.value.booldata = true;
attrs.push_back(attr);
}
else
{
SWSS_LOG_THROW("Unsupported object type %s for high frequency telemetry",
sai_serialize_object_type(object_type).c_str());
}

attr.id = SAI_TAM_TEL_TYPE_ATTR_MODE ;
attr.value.s32 = SAI_TAM_TEL_TYPE_MODE_SINGLE_TYPE;
Expand Down
47 changes: 40 additions & 7 deletions tests/test_hft.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,8 @@ def get_asic_db_objects(self, dvs):
asic_db, "ASIC_STATE:SAI_OBJECT_TYPE_PORT")
buffer_pool_tbl = swsscommon.Table(
asic_db, "ASIC_STATE:SAI_OBJECT_TYPE_BUFFER_POOL")
queue_tbl = swsscommon.Table(
asic_db, "ASIC_STATE:SAI_OBJECT_TYPE_QUEUE")

return {
"tam_transport": self._get_table_entries(tam_transport_tbl),
Expand All @@ -124,7 +126,8 @@ def get_asic_db_objects(self, dvs):
hostif_trap_tbl),
"host_trap_group": self._get_table_entries(host_trap_group_tbl),
"ports": self._get_table_entries(ports_tbl),
"buffer_pool": self._get_table_entries(buffer_pool_tbl)
"buffer_pool": self._get_table_entries(buffer_pool_tbl),
"queues": self._get_table_entries(queue_tbl)
}

def _get_table_entries(self, table):
Expand Down Expand Up @@ -186,10 +189,19 @@ def verify_asic_db_objects(self, asic_db, groups=[(1, 1)], watermark_count=0):
"SAI_TAM_TELEMETRY_TYPE_COUNTER_SUBSCRIPTION", \
"Expected tam telemetry type to be " \
"SAI_TAM_TELEMETRY_TYPE_COUNTER_SUBSCRIPTION"
assert tam_tel_type[
"SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS"] == \
"true", \
"Expected tam telemetry to be switch enable port stats"
enable_capability = False
enable_capability = enable_capability or tam_tel_type.get(
"SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_PORT_STATS", "false") == \
"true"
enable_capability = enable_capability or tam_tel_type.get(
"SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_MMU_STATS", "false") == \
"true"
enable_capability = enable_capability or tam_tel_type.get(
"SAI_TAM_TEL_TYPE_ATTR_SWITCH_ENABLE_OUTPUT_QUEUE_STATS", "false") == \
"true"
assert enable_capability, \
"Expected tam telemetry to have at least one enable " \
"capability set to true"
assert tam_tel_type["SAI_TAM_TEL_TYPE_ATTR_MODE"] == \
"SAI_TAM_TEL_TYPE_MODE_SINGLE_TYPE", \
"Expected tam telemetry to be mode single type"
Expand Down Expand Up @@ -249,8 +261,8 @@ def verify_asic_db_objects(self, asic_db, groups=[(1, 1)], watermark_count=0):
# Fix: Use only the object ID
subscription_oid = tam_counter_sub[
"SAI_TAM_COUNTER_SUBSCRIPTION_ATTR_OBJECT_ID"]
assert (subscription_oid in asic_db["ports"] or subscription_oid in asic_db["buffer_pool"]), \
"Expected tam counter subscription to reference port"
assert (subscription_oid in asic_db["ports"] or subscription_oid in asic_db["buffer_pool"] or subscription_oid in asic_db["queues"]), \
"Expected tam counter subscription to reference port, buffer_pool, or queue"

# Only check if we have counter subscriptions
if counters_number > 0:
Expand Down Expand Up @@ -533,6 +545,27 @@ def test_hft_missing_fields_with_disabled_status(self, dvs, testlog):
self.delete_hft_group(dvs)
self.delete_hft_profile(dvs)

def test_hft_buffer_queue_group(self, dvs, testlog):
"""Test HFT with QUEUE (buffer queue) objects."""
self.create_hft_profile(dvs)
self.create_hft_group(dvs,
group_name="QUEUE",
object_names="Ethernet0|7",
object_counters="PACKETS")

time.sleep(5)

asic_db = self.get_asic_db_objects(dvs)
self.verify_asic_db_objects(asic_db, groups=[(1, 1)])

self.delete_hft_group(dvs, group_name="QUEUE")
time.sleep(2)

asic_db = self.get_asic_db_objects(dvs)
self.verify_asic_db_objects(asic_db, groups=[])

self.delete_hft_profile(dvs)

def test_hft_multiple_groups(self, dvs, testlog):
"""Test HFT with multiple groups and objects."""
# Create HFT profile and groups
Expand Down
Loading