@@ -493,6 +493,83 @@ sai_status_t RedisRemoteSaiInterface::setRedisExtensionAttribute(
493493 return SAI_STATUS_FAILURE;
494494}
495495
496+ sai_status_t RedisRemoteSaiInterface::setLinkEventDampingConfig (
497+ _In_ sai_object_type_t objectType,
498+ _In_ sai_object_id_t objectId,
499+ _In_ const std::vector<swss::FieldValueTuple> &values)
500+ {
501+ SWSS_LOG_ENTER ();
502+
503+ std::string key = sai_serialize_object_type (objectType) + " :" + sai_serialize_object_id (objectId);
504+
505+ m_communicationChannel->set (key, values, REDIS_ASIC_STATE_COMMAND_DAMPING_CONFIG_SET);
506+
507+ if (m_syncMode)
508+ {
509+ swss::KeyOpFieldsValuesTuple kco;
510+ auto status = m_communicationChannel->wait (REDIS_ASIC_STATE_COMMAND_DAMPING_CONFIG_SET, kco);
511+
512+ m_recorder->recordGenericSetResponse (status);
513+
514+ return status;
515+ }
516+
517+ return SAI_STATUS_SUCCESS;
518+ }
519+
520+ sai_status_t RedisRemoteSaiInterface::setRedisPortExtensionAttribute (
521+ _In_ sai_object_type_t objectType,
522+ _In_ sai_object_id_t objectId,
523+ _In_ const sai_attribute_t *attr)
524+ {
525+ SWSS_LOG_ENTER ();
526+
527+ if (attr == nullptr )
528+ {
529+ SWSS_LOG_ERROR (" attr pointer is null" );
530+
531+ return SAI_STATUS_INVALID_PARAMETER;
532+ }
533+
534+ std::string str_attr_id = sai_serialize_redis_port_attr_id (
535+ static_cast <sai_redis_port_attr_t >(attr->id ));
536+
537+ switch (attr->id )
538+ {
539+ case SAI_REDIS_PORT_ATTR_LINK_EVENT_DAMPING_ALGORITHM:
540+ {
541+ std::string str_attr_value = sai_serialize_redis_link_event_damping_algorithm (
542+ static_cast <sai_redis_link_event_damping_algorithm_t >(attr->value .s32 ));
543+
544+ return setLinkEventDampingConfig (
545+ objectType, objectId, {swss::FieldValueTuple (str_attr_id, str_attr_value)});
546+ }
547+ case SAI_REDIS_PORT_ATTR_LINK_EVENT_DAMPING_ALGO_AIED_CONFIG:
548+ {
549+ sai_redis_link_event_damping_algo_aied_config_t *config =
550+ (sai_redis_link_event_damping_algo_aied_config_t *)attr->value .ptr ;
551+
552+ if (config == NULL )
553+ {
554+ SWSS_LOG_ERROR (" invalid link damping config attr value NULL" );
555+
556+ return SAI_STATUS_INVALID_PARAMETER;
557+ }
558+
559+ std::string str_attr_value = sai_serialize_redis_link_event_damping_aied_config (*config);
560+
561+ return setLinkEventDampingConfig (
562+ objectType, objectId, {swss::FieldValueTuple (str_attr_id, str_attr_value)});
563+ }
564+ default :
565+ break ;
566+ }
567+
568+ SWSS_LOG_ERROR (" unknown redis port extension attribute: %d" , attr->id );
569+
570+ return SAI_STATUS_INVALID_PARAMETER;
571+ }
572+
496573bool RedisRemoteSaiInterface::isSaiS8ListValidString (
497574 _In_ const sai_s8_list_t &s8list)
498575{
@@ -625,6 +702,11 @@ sai_status_t RedisRemoteSaiInterface::set(
625702 return setRedisExtensionAttribute (objectType, objectId, attr);
626703 }
627704
705+ if (RedisRemoteSaiInterface::isRedisPortAttribute (objectType, attr))
706+ {
707+ return setRedisPortExtensionAttribute (objectType, objectId, attr);
708+ }
709+
628710 auto status = set (
629711 objectType,
630712 sai_serialize_object_id (objectId),
@@ -1792,6 +1874,20 @@ bool RedisRemoteSaiInterface::isRedisAttribute(
17921874 return true ;
17931875}
17941876
1877+ bool RedisRemoteSaiInterface::isRedisPortAttribute (
1878+ _In_ sai_object_id_t objectType,
1879+ _In_ const sai_attribute_t * attr)
1880+ {
1881+ SWSS_LOG_ENTER ();
1882+
1883+ if ((objectType != SAI_OBJECT_TYPE_PORT) || (attr == nullptr ) || (attr->id < SAI_PORT_ATTR_CUSTOM_RANGE_START))
1884+ {
1885+ return false ;
1886+ }
1887+
1888+ return true ;
1889+ }
1890+
17951891void RedisRemoteSaiInterface::handleNotification (
17961892 _In_ const std::string &name,
17971893 _In_ const std::string &serializedNotification,
0 commit comments