sai_status_t set_switch_attribute_fn()

in fboss/agent/hw/sai/fake/FakeSaiSwitch.cpp [130:263]


sai_status_t set_switch_attribute_fn(
    sai_object_id_t switch_id,
    const sai_attribute_t* attr) {
  auto fs = FakeSai::getInstance();
  auto& sw = fs->switchManager.get(switch_id);
  sai_status_t res;
  if (!attr) {
    return SAI_STATUS_INVALID_PARAMETER;
  }
  res = SAI_STATUS_SUCCESS;
  switch (attr->id) {
    case SAI_SWITCH_ATTR_SRC_MAC_ADDRESS:
      sw.setSrcMac(attr->value.mac);
      break;
    case SAI_SWITCH_ATTR_INIT_SWITCH:
      sw.setInitStatus(attr->value.booldata);
      break;
    case SAI_SWITCH_ATTR_SWITCH_HARDWARE_INFO:
      sw.setHwInfo(std::vector<int8_t>(
          attr->value.s8list.list,
          attr->value.s8list.list + attr->value.s8list.count));
      break;
    case SAI_SWITCH_ATTR_SWITCH_SHELL_ENABLE:
      sw.setShellStatus(attr->value.booldata);
      break;
    case SAI_SWITCH_ATTR_ECMP_HASH_IPV4:
      sw.setEcmpHashV4Id(attr->value.oid);
      break;
    case SAI_SWITCH_ATTR_ECMP_HASH_IPV6:
      sw.setEcmpHashV6Id(attr->value.oid);
      break;
    case SAI_SWITCH_ATTR_LAG_HASH_IPV4:
      sw.setLagHashV4Id(attr->value.oid);
      break;
    case SAI_SWITCH_ATTR_LAG_HASH_IPV6:
      sw.setLagHashV6Id(attr->value.oid);
      break;
    case SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_SEED:
      sw.setEcmpSeed(attr->value.u32);
      break;
    case SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_SEED:
      sw.setLagSeed(attr->value.u32);
      break;
    case SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_ALGORITHM:
      sw.setEcmpAlgorithm(attr->value.s32);
      break;
    case SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_ALGORITHM:
      sw.setLagAlgorithm(attr->value.s32);
      break;
    case SAI_SWITCH_ATTR_QOS_DSCP_TO_TC_MAP:
      sw.setDscpToTc(attr->value.oid);
      break;
    case SAI_SWITCH_ATTR_QOS_TC_TO_QUEUE_MAP:
      sw.setTcToQueue(attr->value.oid);
      break;
    case SAI_SWITCH_ATTR_QOS_MPLS_EXP_TO_TC_MAP:
      sw.setExpToTc(attr->value.oid);
      break;
    case SAI_SWITCH_ATTR_QOS_TC_AND_COLOR_TO_MPLS_EXP_MAP:
      sw.setTcToExp(attr->value.oid);
      break;
    case SAI_SWITCH_ATTR_RESTART_WARM:
      sw.setRestartWarm(attr->value.booldata);
      break;
    case SAI_SWITCH_ATTR_FDB_AGING_TIME:
      sw.setMacAgingTime(attr->value.u32);
      break;
    case SAI_SWITCH_ATTR_ECN_ECT_THRESHOLD_ENABLE:
      sw.setUseEcnThresholds(attr->value.booldata);
      break;
    case SAI_SWITCH_ATTR_INGRESS_ACL:
      sw.setIngressAcl(attr->value.oid);
      break;
    case SAI_SWITCH_ATTR_EXT_FAKE_LED:
    case SAI_SWITCH_ATTR_EXT_FAKE_LED_RESET:
      return sw.setLed(attr);
    case SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY:
    case SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY:
    case SAI_SWITCH_ATTR_PACKET_EVENT_NOTIFY:
    case SAI_SWITCH_ATTR_TAM_EVENT_NOTIFY:
      // No callback implementation in SAI
      break;
    case SAI_SWITCH_ATTR_COUNTER_REFRESH_INTERVAL:
      sw.setCounterRefreshInterval(attr->value.u32);
      break;
    case SAI_SWITCH_ATTR_FIRMWARE_PATH_NAME:
      sw.setFirmwarePathName(std::vector<int8_t>(
          attr->value.s8list.list,
          attr->value.s8list.list + attr->value.s8list.count));
      break;
    case SAI_SWITCH_ATTR_FIRMWARE_LOAD_METHOD:
      sw.setFirmwareLoadMethod(attr->value.s32);
      break;
    case SAI_SWITCH_ATTR_FIRMWARE_LOAD_TYPE:
      sw.setFirmwareLoadType(attr->value.s32);
      break;
    case SAI_SWITCH_ATTR_HARDWARE_ACCESS_BUS:
      sw.setHardwareAccessBus(attr->value.s32);
      break;
    case SAI_SWITCH_ATTR_PLATFROM_CONTEXT:
      sw.setPlatformContext(attr->value.u64);
      break;
    case SAI_SWITCH_ATTR_SWITCH_PROFILE_ID:
      sw.setProfileId(attr->value.u32);
      break;
    case SAI_SWITCH_ATTR_SWITCH_ID:
      sw.setSwitchId(attr->value.u32);
      break;
    case SAI_SWITCH_ATTR_MAX_SYSTEM_CORES:
      sw.setMaxSystemCores(attr->value.u32);
      break;
    case SAI_SWITCH_ATTR_SYSTEM_PORT_CONFIG_LIST:
      sw.setSysPortConfigList(std::vector<sai_object_id_t>(
          attr->value.objlist.list,
          attr->value.objlist.list + attr->value.objlist.count));
      break;
    case SAI_SWITCH_ATTR_TYPE:
      sw.setSwitchType(attr->value.u32);
      break;
    case SAI_SWITCH_ATTR_REGISTER_READ:
      sw.setReadFn(attr->value.ptr);
      break;
    case SAI_SWITCH_ATTR_REGISTER_WRITE:
      sw.setWriteFn(attr->value.ptr);
      break;
    case SAI_SWITCH_ATTR_EXT_FAKE_HW_ECC_ERROR_INITIATE:
      // no-op
      break;
    default:
      res = SAI_STATUS_INVALID_PARAMETER;
      break;
  }
  return res;
}