Skip to content

Commit

Permalink
Fix PoE device list issue
Browse files Browse the repository at this point in the history
SAI_SWITCH_ATTR_POE_DEVICE_LIST is not readonly, so
it is not handled by refresh_read_only().

Signed-off-by: Serhiy Boiko <serhiy.boiko@plvision.eu>
  • Loading branch information
SerhiyBoikoPLV committed Jul 25, 2024
1 parent e6bb293 commit 02dda60
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 56 deletions.
50 changes: 13 additions & 37 deletions vslib/SwitchPoE.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,9 @@ sai_status_t SwitchPoE::set_switch_default_attributes()
};
sai_attribute_t attr;

attr.id = SAI_SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS;
attr.value.u32 = 0;
attr.id = SAI_SWITCH_ATTR_POE_DEVICE_LIST;
attr.value.objlist.count = 0;
attr.value.objlist.list = NULL;
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));

attr.id = SAI_SWITCH_ATTR_WARM_RECOVER;
Expand Down Expand Up @@ -139,6 +140,16 @@ sai_status_t SwitchPoE::createPoeDevice(
attr.value.u32 = SAI_POE_DEVICE_LIMIT_MODE_CLASS;
CHECK_STATUS(set(SAI_OBJECT_TYPE_POE_DEVICE, object_id, &attr));
}

/* update the list of all poe devices on switch */
m_poe_device_list.push_back(object_id);

auto device_count = (uint32_t)m_poe_device_list.size();
attr.id = SAI_SWITCH_ATTR_POE_DEVICE_LIST;
attr.value.objlist.count = device_count;
attr.value.objlist.list = m_poe_device_list.data();
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, switch_id, &attr));

return SAI_STATUS_SUCCESS;
}

Expand Down Expand Up @@ -186,15 +197,6 @@ sai_status_t SwitchPoE::refresh_read_only(
{
SWSS_LOG_ENTER();

if (meta->objecttype == SAI_OBJECT_TYPE_SWITCH)
{
switch (meta->attrid)
{
case SAI_SWITCH_ATTR_POE_DEVICE_LIST:
return refresh_poe_device_list(meta);
}
}

sai_attribute_t attr;
attr.id = meta->attrid;
if (meta->objecttype == SAI_OBJECT_TYPE_POE_DEVICE)
Expand Down Expand Up @@ -293,32 +295,6 @@ sai_status_t SwitchPoE::refresh_read_only(
return SAI_STATUS_NOT_IMPLEMENTED;
}

sai_status_t SwitchPoE::refresh_poe_device_list(
_In_ const sai_attr_metadata_t *meta)
{
SWSS_LOG_ENTER();

sai_attribute_t attr;
m_poe_device_list.clear();

for (const auto& it: m_objectHash.at(SAI_OBJECT_TYPE_POE_DEVICE))
{
sai_object_id_t device_oid;
sai_deserialize_object_id(it.first, device_oid);
m_poe_device_list.push_back(device_oid);
}

auto device_count = (uint32_t)m_poe_device_list.size();
attr.id = SAI_SWITCH_ATTR_POE_DEVICE_LIST;
attr.value.objlist.count = device_count;
attr.value.objlist.list = m_poe_device_list.data();

CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));

SWSS_LOG_NOTICE("refreshed poe device list, current device number: %lu", device_count);
return SAI_STATUS_SUCCESS;
}

sai_status_t SwitchPoE::refresh_poe_pse_list(
_In_ const sai_attr_metadata_t *meta,
_In_ sai_object_id_t poe_device_id)
Expand Down
3 changes: 0 additions & 3 deletions vslib/SwitchPoE.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,6 @@ namespace saivs
_In_ const sai_attr_metadata_t *meta,
_In_ sai_object_id_t object_id) override;

virtual sai_status_t refresh_poe_device_list(
_In_ const sai_attr_metadata_t *meta) override;

virtual sai_status_t refresh_poe_pse_list(
_In_ const sai_attr_metadata_t *meta,
_In_ sai_object_id_t poe_device_id);
Expand Down
13 changes: 0 additions & 13 deletions vslib/SwitchStateBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2021,16 +2021,6 @@ sai_status_t SwitchStateBase::refresh_bridge_port_list(
return SAI_STATUS_NOT_IMPLEMENTED;
}

sai_status_t SwitchStateBase::refresh_poe_device_list(
_In_ const sai_attr_metadata_t *meta)
{
SWSS_LOG_ENTER();

SWSS_LOG_ERROR("implement in child class");

return SAI_STATUS_NOT_IMPLEMENTED;
}

sai_status_t SwitchStateBase::refresh_port_poe_port_id(
_In_ sai_object_id_t port_id)
{
Expand Down Expand Up @@ -2416,9 +2406,6 @@ sai_status_t SwitchStateBase::refresh_read_only(

case SAI_SWITCH_ATTR_SUPPORTED_OBJECT_TYPE_LIST:
return SAI_STATUS_SUCCESS;

case SAI_SWITCH_ATTR_POE_DEVICE_LIST:
return refresh_poe_device_list(meta);
}
}

Expand Down
3 changes: 0 additions & 3 deletions vslib/SwitchStateBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,6 @@ namespace saivs
_In_ const sai_attr_metadata_t *meta,
_In_ sai_object_id_t bridge_id);

virtual sai_status_t refresh_poe_device_list(
_In_ const sai_attr_metadata_t *meta);

virtual sai_status_t refresh_port_poe_port_id(
_In_ sai_object_id_t port_id);

Expand Down

0 comments on commit 02dda60

Please sign in to comment.