vector SaiTracer::setAttrList()

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;
}