@@ -265,6 +265,25 @@ void Recorder::recordFlushFdbEntriesResponse(
265265 recordLine (" F|" + sai_serialize_status (status));
266266}
267267
268+ void Recorder::recordQueryAttributeCapability (
269+ _In_ const std::string& key,
270+ _In_ const std::vector<swss::FieldValueTuple>& arguments)
271+ {
272+ SWSS_LOG_ENTER ();
273+
274+ recordLine (" q|attribute_capability|" + key + " |" + joinFieldValues (arguments));
275+ }
276+
277+ void Recorder::recordQueryAttributeCapabilityResponse (
278+ _In_ sai_status_t status,
279+ _In_ const std::vector<swss::FieldValueTuple>& arguments)
280+ {
281+ SWSS_LOG_ENTER ();
282+
283+ recordLine (" Q|attribute_capability|" + sai_serialize_status (status) + " |" + joinFieldValues (arguments));
284+ }
285+
286+
268287void Recorder::recordQueryAttributeEnumValuesCapability (
269288 _In_ const std::string& key,
270289 _In_ const std::vector<swss::FieldValueTuple>& arguments)
@@ -886,6 +905,76 @@ void Recorder::recordObjectTypeGetAvailabilityResponse(
886905 recordObjectTypeGetAvailabilityResponse (status, values);
887906}
888907
908+ void Recorder::recordQueryAttributeCapability (
909+ _In_ sai_object_id_t switchId,
910+ _In_ sai_object_type_t objectType,
911+ _In_ sai_attr_id_t attrId,
912+ _Out_ sai_attr_capability_t *Capability)
913+ {
914+ SWSS_LOG_ENTER ();
915+
916+ auto meta = sai_metadata_get_attr_metadata (objectType, attrId);
917+
918+ if (meta == NULL )
919+ {
920+ SWSS_LOG_ERROR (" Failed to find attribute metadata: object type %s, attr id %d" ,
921+ sai_serialize_object_type (objectType).c_str (), attrId);
922+ return ;
923+ }
924+
925+ auto key = sai_serialize_object_type (SAI_OBJECT_TYPE_SWITCH) + " :" + sai_serialize_object_id (switchId);
926+
927+ auto object_type_str = sai_serialize_object_type (objectType);
928+ const std::string attr_id_str = meta->attridname ;
929+ const std::vector<swss::FieldValueTuple> values =
930+ {
931+ swss::FieldValueTuple (" OBJECT_TYPE" , object_type_str),
932+ swss::FieldValueTuple (" ATTR_ID" , attr_id_str)
933+ };
934+
935+ SWSS_LOG_DEBUG (" Query arguments: switch %s, object_type: %s, attribute: %s" ,
936+ key.c_str (),
937+ object_type_str.c_str (),
938+ meta->attridname );
939+
940+ recordQueryAttributeCapability (key, values);
941+ }
942+
943+
944+ void Recorder::recordQueryAttributeCapabilityResponse (
945+ _In_ sai_status_t status,
946+ _In_ sai_object_type_t objectType,
947+ _In_ sai_attr_id_t attrId,
948+ _In_ const sai_attr_capability_t * capability)
949+ {
950+ SWSS_LOG_ENTER ();
951+
952+ auto meta = sai_metadata_get_attr_metadata (objectType, attrId);
953+
954+ if (meta == NULL )
955+ {
956+ SWSS_LOG_ERROR (" Failed to find attribute metadata: object type %s, attr id %d" ,
957+ sai_serialize_object_type (objectType).c_str (), attrId);
958+ return ;
959+ }
960+
961+ auto object_type_str = sai_serialize_object_type (objectType);
962+ const std::string attr_id_str = meta->attridname ;
963+ const std::string create_str = (status == SAI_STATUS_SUCCESS ? (capability->create_implemented ? " true" :" false" ): " false" );
964+ const std::string set_str = (status == SAI_STATUS_SUCCESS ? (capability->set_implemented ? " true" :" false" ): " false" );
965+ const std::string get_str = (status == SAI_STATUS_SUCCESS ? (capability->get_implemented ? " true" :" false" ): " false" );
966+ const std::vector<swss::FieldValueTuple> values =
967+ {
968+ swss::FieldValueTuple (" OBJECT_TYPE" , object_type_str),
969+ swss::FieldValueTuple (" ATTR_ID" , attr_id_str),
970+ swss::FieldValueTuple (" CREATE_IMP" , create_str),
971+ swss::FieldValueTuple (" SET_IMP" , set_str),
972+ swss::FieldValueTuple (" GET_IMP" , get_str)
973+ };
974+
975+ recordQueryAttributeCapabilityResponse (status, values);
976+ }
977+
889978void Recorder::recordQueryAattributeEnumValuesCapability (
890979 _In_ sai_object_id_t switchId,
891980 _In_ sai_object_type_t objectType,
0 commit comments