in fboss/agent/hw/sai/tracer/SaiTracer.cpp [1102:1272]
vector<string> SaiTracer::setAttrList(
const sai_attribute_t* attr_list,
uint32_t attr_count,
sai_object_type_t object_type) {
if (!FLAGS_enable_replayer) {
return {};
}
checkAttrCount(attr_count);
auto constexpr sai_attribute = "s_a";
vector<string> attrLines;
attrLines.push_back(
to<string>("memset(s_a,0,ATTR_SIZE*", maxAttrCount_, ")"));
// Setup ids
for (int i = 0; i < attr_count; ++i) {
attrLines.push_back(
to<string>(sai_attribute, "[", i, "].id=", attr_list[i].id));
}
// Call functions defined in *ApiTracer.h to serialize attributes
// that are specific to each Sai object type
switch (object_type) {
case SAI_OBJECT_TYPE_ACL_COUNTER:
setAclCounterAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_ACL_ENTRY:
setAclEntryAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_ACL_TABLE:
setAclTableAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_ACL_TABLE_GROUP:
setAclTableGroupAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_ACL_TABLE_GROUP_MEMBER:
setAclTableGroupMemberAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_BRIDGE:
setBridgeAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_BRIDGE_PORT:
setBridgePortAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_BUFFER_POOL:
setBufferPoolAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_BUFFER_PROFILE:
setBufferProfileAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_DEBUG_COUNTER:
setDebugCounterAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_FDB_ENTRY:
setFdbEntryAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_HASH:
setHashAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_HOSTIF_PACKET:
setHostifPacketAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_HOSTIF_TRAP:
setHostifTrapAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:
setHostifTrapGroupAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_INSEG_ENTRY:
setInsegEntryAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_LAG:
setLagAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_LAG_MEMBER:
setLagMemberAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_MACSEC:
setMacsecAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_MACSEC_PORT:
setMacsecPortAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_MACSEC_FLOW:
setMacsecFlowAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_MACSEC_SA:
setMacsecSaAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_MACSEC_SC:
setMacsecScAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_MIRROR_SESSION:
setMirrorSessionAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_NEIGHBOR_ENTRY:
setNeighborEntryAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_NEXT_HOP:
setNextHopAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_NEXT_HOP_GROUP:
setNextHopGroupAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER:
setNextHopGroupMemberAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_PORT:
setPortAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_PORT_SERDES:
setPortSerdesAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_PORT_CONNECTOR:
setPortConnectorAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_QOS_MAP:
setQosMapAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_QUEUE:
setQueueAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_ROUTE_ENTRY:
setRouteEntryAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_ROUTER_INTERFACE:
setRouterInterfaceAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_SAMPLEPACKET:
setSamplePacketAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_SCHEDULER:
setSchedulerAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_SWITCH:
setSwitchAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_TAM:
setTamAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_TAM_EVENT:
setTamEventAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_TAM_EVENT_ACTION:
setTamEventActionAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_TAM_REPORT:
setTamReportAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_VIRTUAL_ROUTER:
setVirtualRouterAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_VLAN:
setVlanAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_VLAN_MEMBER:
setVlanMemberAttributes(attr_list, attr_count, attrLines);
break;
case SAI_OBJECT_TYPE_WRED:
setWredAttributes(attr_list, attr_count, attrLines);
break;
default:
// TODO: For other APIs, create new API wrappers and invoke
// setAttributes() function here
break;
}
return attrLines;
}