in vslib/SwitchStateBase.cpp [2410:2603]
sai_status_t SwitchStateBase::refresh_read_only(
_In_ const sai_attr_metadata_t *meta,
_In_ sai_object_id_t object_id)
{
SWSS_LOG_ENTER();
if (meta->objecttype == SAI_OBJECT_TYPE_SWITCH)
{
switch (meta->attrid)
{
case SAI_SWITCH_ATTR_CPU_PORT:
case SAI_SWITCH_ATTR_DEFAULT_VIRTUAL_ROUTER_ID:
case SAI_SWITCH_ATTR_DEFAULT_TRAP_GROUP:
case SAI_SWITCH_ATTR_DEFAULT_VLAN_ID:
case SAI_SWITCH_ATTR_DEFAULT_STP_INST_ID:
case SAI_SWITCH_ATTR_DEFAULT_1Q_BRIDGE_ID:
return SAI_STATUS_SUCCESS;
case SAI_SWITCH_ATTR_ECMP_HASH:
case SAI_SWITCH_ATTR_LAG_HASH:
return SAI_STATUS_SUCCESS;
case SAI_SWITCH_ATTR_ACL_ENTRY_MINIMUM_PRIORITY:
case SAI_SWITCH_ATTR_ACL_ENTRY_MAXIMUM_PRIORITY:
return SAI_STATUS_SUCCESS;
case SAI_SWITCH_ATTR_MAX_ACL_ACTION_COUNT:
case SAI_SWITCH_ATTR_ACL_STAGE_INGRESS:
case SAI_SWITCH_ATTR_ACL_STAGE_EGRESS:
return SAI_STATUS_SUCCESS;
case SAI_SWITCH_ATTR_NUMBER_OF_ECMP_GROUPS:
return SAI_STATUS_SUCCESS;
case SAI_SWITCH_ATTR_PORT_NUMBER:
case SAI_SWITCH_ATTR_PORT_LIST:
return refresh_port_list(meta);
case SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_CHILDS_PER_SCHEDULER_GROUP:
return SAI_STATUS_SUCCESS;
case SAI_SWITCH_ATTR_AVAILABLE_IPV4_ROUTE_ENTRY:
case SAI_SWITCH_ATTR_AVAILABLE_IPV6_ROUTE_ENTRY:
case SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEXTHOP_ENTRY:
case SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEXTHOP_ENTRY:
case SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEIGHBOR_ENTRY:
case SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEIGHBOR_ENTRY:
case SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_MEMBER_ENTRY:
case SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_ENTRY:
case SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY:
case SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE:
case SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE_GROUP:
case SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY:
case SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY:
case SAI_SWITCH_ATTR_AVAILABLE_IPMC_ENTRY:
case SAI_SWITCH_ATTR_AVAILABLE_DOUBLE_NAT_ENTRY:
return SAI_STATUS_SUCCESS;
case SAI_SWITCH_ATTR_NUMBER_OF_SYSTEM_PORTS:
case SAI_SWITCH_ATTR_SYSTEM_PORT_LIST:
return refresh_system_port_list(meta);
case SAI_SWITCH_ATTR_NUMBER_OF_FABRIC_PORTS:
case SAI_SWITCH_ATTR_FABRIC_PORT_LIST:
return SAI_STATUS_SUCCESS;
case SAI_SWITCH_ATTR_SUPPORTED_OBJECT_TYPE_LIST:
return SAI_STATUS_SUCCESS;
}
}
if (meta->objecttype == SAI_OBJECT_TYPE_PORT)
{
switch (meta->attrid)
{
case SAI_PORT_ATTR_QOS_NUMBER_OF_QUEUES:
case SAI_PORT_ATTR_QOS_QUEUE_LIST:
return refresh_qos_queues(meta, object_id);
case SAI_PORT_ATTR_NUMBER_OF_INGRESS_PRIORITY_GROUPS:
case SAI_PORT_ATTR_INGRESS_PRIORITY_GROUP_LIST:
return refresh_ingress_priority_group(meta, object_id);
case SAI_PORT_ATTR_QOS_NUMBER_OF_SCHEDULER_GROUPS:
case SAI_PORT_ATTR_QOS_SCHEDULER_GROUP_LIST:
return refresh_scheduler_groups(meta, object_id);
/*
* This status is based on hostif vEthernetX status.
*/
case SAI_PORT_ATTR_OPER_STATUS:
case SAI_PORT_ATTR_HOST_TX_READY_STATUS:
return SAI_STATUS_SUCCESS;
case SAI_PORT_ATTR_FABRIC_ATTACHED:
case SAI_PORT_ATTR_FABRIC_ATTACHED_SWITCH_ID:
case SAI_PORT_ATTR_FABRIC_ATTACHED_PORT_INDEX:
case SAI_PORT_ATTR_HW_LANE_LIST:
return SAI_STATUS_SUCCESS;
case SAI_PORT_ATTR_PORT_SERDES_ID:
return refresh_port_serdes_id(object_id);
case SAI_PORT_ATTR_SUPPORTED_AUTO_NEG_MODE:
return SAI_STATUS_SUCCESS;
case SAI_PORT_ATTR_OPER_SPEED:
return refresh_port_oper_speed(object_id);
}
}
if (meta->objecttype == SAI_OBJECT_TYPE_SYSTEM_PORT)
{
switch (meta->attrid)
{
case SAI_SYSTEM_PORT_ATTR_TYPE:
case SAI_SYSTEM_PORT_ATTR_PORT:
case SAI_SYSTEM_PORT_ATTR_QOS_NUMBER_OF_VOQS:
case SAI_SYSTEM_PORT_ATTR_QOS_VOQ_LIST:
return SAI_STATUS_SUCCESS;
}
}
if (meta->objecttype == SAI_OBJECT_TYPE_SCHEDULER_GROUP)
{
switch (meta->attrid)
{
case SAI_SCHEDULER_GROUP_ATTR_CHILD_COUNT:
case SAI_SCHEDULER_GROUP_ATTR_CHILD_LIST:
return refresh_scheduler_groups(meta, object_id);
}
}
if (meta->objecttype == SAI_OBJECT_TYPE_BRIDGE && meta->attrid == SAI_BRIDGE_ATTR_PORT_LIST)
{
return refresh_bridge_port_list(meta, object_id);
}
if (meta->objecttype == SAI_OBJECT_TYPE_VLAN && meta->attrid == SAI_VLAN_ATTR_MEMBER_LIST)
{
return refresh_vlan_member_list(meta, object_id);
}
if (meta->objecttype == SAI_OBJECT_TYPE_DEBUG_COUNTER && meta->attrid == SAI_DEBUG_COUNTER_ATTR_INDEX)
{
return SAI_STATUS_SUCCESS;
}
if (meta->objecttype == SAI_OBJECT_TYPE_MACSEC && meta->attrid == SAI_MACSEC_ATTR_SCI_IN_INGRESS_MACSEC_ACL)
{
return refresh_macsec_sci_in_ingress_macsec_acl(object_id);
}
if (meta->objecttype == SAI_OBJECT_TYPE_QUEUE && meta->attrid == SAI_QUEUE_ATTR_PAUSE_STATUS)
{
return refresh_queue_pause_status(object_id);
}
if (meta->objecttype == SAI_OBJECT_TYPE_MACSEC_SA)
{
return refresh_macsec_sa_stat(object_id);
}
if (meta->objecttype == SAI_OBJECT_TYPE_ACL_TABLE && meta->attrid == SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_ENTRY)
{
return refresh_acl_table_entries(object_id);
}
if (meta->objecttype == SAI_OBJECT_TYPE_ACL_TABLE && meta->attrid == SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_COUNTER)
{
return refresh_acl_table_counters(object_id);
}
auto mmeta = m_meta.lock();
if (mmeta)
{
if (mmeta->meta_unittests_enabled())
{
SWSS_LOG_NOTICE("unittests enabled, SET could be performed on %s, not recalculating", meta->attridname);
return SAI_STATUS_SUCCESS;
}
}
else
{
SWSS_LOG_WARN("meta pointer expired");
}
SWSS_LOG_WARN("need to recalculate RO: %s", meta->attridname);
return SAI_STATUS_NOT_IMPLEMENTED;
}