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