in meta/SaiSerialize.cpp [136:522]
sai_status_t transfer_attribute(
_In_ sai_attr_value_type_t serialization_type,
_In_ const sai_attribute_t &src_attr,
_In_ sai_attribute_t &dst_attr,
_In_ bool countOnly)
{
SWSS_LOG_ENTER();
switch (serialization_type)
{
case SAI_ATTR_VALUE_TYPE_BOOL:
transfer_primitive(src_attr.value.booldata, dst_attr.value.booldata);
break;
case SAI_ATTR_VALUE_TYPE_CHARDATA:
transfer_primitive(src_attr.value.chardata, dst_attr.value.chardata);
break;
case SAI_ATTR_VALUE_TYPE_UINT8:
transfer_primitive(src_attr.value.u8, dst_attr.value.u8);
break;
case SAI_ATTR_VALUE_TYPE_INT8:
transfer_primitive(src_attr.value.s8, dst_attr.value.s8);
break;
case SAI_ATTR_VALUE_TYPE_UINT16:
transfer_primitive(src_attr.value.u16, dst_attr.value.u16);
break;
case SAI_ATTR_VALUE_TYPE_INT16:
transfer_primitive(src_attr.value.s16, dst_attr.value.s16);
break;
case SAI_ATTR_VALUE_TYPE_UINT32:
transfer_primitive(src_attr.value.u32, dst_attr.value.u32);
break;
case SAI_ATTR_VALUE_TYPE_INT32:
transfer_primitive(src_attr.value.s32, dst_attr.value.s32);
break;
case SAI_ATTR_VALUE_TYPE_UINT64:
transfer_primitive(src_attr.value.u64, dst_attr.value.u64);
break;
// case SAI_ATTR_VALUE_TYPE_INT64:
// transfer_primitive(src_attr.value.s64, dst_attr.value.s64);
// break;
case SAI_ATTR_VALUE_TYPE_MAC:
transfer_primitive(src_attr.value.mac, dst_attr.value.mac);
break;
case SAI_ATTR_VALUE_TYPE_IPV4:
transfer_primitive(src_attr.value.ip4, dst_attr.value.ip4);
break;
case SAI_ATTR_VALUE_TYPE_IPV6:
transfer_primitive(src_attr.value.ip6, dst_attr.value.ip6);
break;
case SAI_ATTR_VALUE_TYPE_POINTER:
transfer_primitive(src_attr.value.ptr, dst_attr.value.ptr);
break;
case SAI_ATTR_VALUE_TYPE_IP_ADDRESS:
transfer_primitive(src_attr.value.ipaddr, dst_attr.value.ipaddr);
break;
case SAI_ATTR_VALUE_TYPE_IP_PREFIX:
transfer_primitive(src_attr.value.ipprefix, dst_attr.value.ipprefix);
break;
case SAI_ATTR_VALUE_TYPE_OBJECT_ID:
transfer_primitive(src_attr.value.oid, dst_attr.value.oid);
break;
case SAI_ATTR_VALUE_TYPE_OBJECT_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.objlist, dst_attr.value.objlist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_UINT8_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.u8list, dst_attr.value.u8list, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_INT8_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.s8list, dst_attr.value.s8list, countOnly));
break;
// case SAI_ATTR_VALUE_TYPE_UINT16_LIST:
// RETURN_ON_ERROR(transfer_list(src_attr.value.u16list, dst_attr.value.u16list, countOnly));
// break;
//
// case SAI_ATTR_VALUE_TYPE_INT16_LIST:
// RETURN_ON_ERROR(transfer_list(src_attr.value.s16list, dst_attr.value.s16list, countOnly));
// break;
case SAI_ATTR_VALUE_TYPE_UINT32_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.u32list, dst_attr.value.u32list, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_INT32_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.s32list, dst_attr.value.s32list, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_UINT32_RANGE:
transfer_primitive(src_attr.value.u32range, dst_attr.value.u32range);
break;
// case SAI_ATTR_VALUE_TYPE_INT32_RANGE:
// transfer_primitive(src_attr.value.s32range, dst_attr.value.s32range);
// break;
case SAI_ATTR_VALUE_TYPE_UINT16_RANGE_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.u16rangelist, dst_attr.value.u16rangelist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_TIMESPEC:
transfer_primitive(src_attr.value.timespec, dst_attr.value.timespec);
break;
case SAI_ATTR_VALUE_TYPE_JSON:
transfer_primitive(src_attr.value.json, dst_attr.value.json);
break;
case SAI_ATTR_VALUE_TYPE_PORT_LANE_LATCH_STATUS_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.portlanelatchstatuslist, dst_attr.value.portlanelatchstatuslist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_LATCH_STATUS:
transfer_primitive(src_attr.value.latchstatus, dst_attr.value.latchstatus);
break;
case SAI_ATTR_VALUE_TYPE_VLAN_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.vlanlist, dst_attr.value.vlanlist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_QOS_MAP_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.qosmap, dst_attr.value.qosmap, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_ACL_RESOURCE_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.aclresource, dst_attr.value.aclresource, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_IP_ADDRESS_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.ipaddrlist, dst_attr.value.ipaddrlist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_SEGMENT_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.segmentlist, dst_attr.value.segmentlist, countOnly));
break;
/* ACL FIELD DATA */
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_BOOL:
transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
transfer_primitive(src_attr.value.aclfield.data.booldata, dst_attr.value.aclfield.data.booldata);
break;
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8:
transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
transfer_primitive(src_attr.value.aclfield.mask.u8, dst_attr.value.aclfield.mask.u8);
transfer_primitive(src_attr.value.aclfield.data.u8, dst_attr.value.aclfield.data.u8);
break;
// case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT8:
// transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
// transfer_primitive(src_attr.value.aclfield.mask.s8, dst_attr.value.aclfield.mask.s8);
// transfer_primitive(src_attr.value.aclfield.data.s8, dst_attr.value.aclfield.data.s8);
// break;
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT16:
transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
transfer_primitive(src_attr.value.aclfield.mask.u16, dst_attr.value.aclfield.mask.u16);
transfer_primitive(src_attr.value.aclfield.data.u16, dst_attr.value.aclfield.data.u16);
break;
// case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT16:
// transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
// transfer_primitive(src_attr.value.aclfield.mask.s16, dst_attr.value.aclfield.mask.s16);
// transfer_primitive(src_attr.value.aclfield.data.s16, dst_attr.value.aclfield.data.s16);
// break;
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT32:
transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
transfer_primitive(src_attr.value.aclfield.mask.u32, dst_attr.value.aclfield.mask.u32);
transfer_primitive(src_attr.value.aclfield.data.u32, dst_attr.value.aclfield.data.u32);
break;
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT32:
transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
transfer_primitive(src_attr.value.aclfield.mask.s32, dst_attr.value.aclfield.mask.s32);
transfer_primitive(src_attr.value.aclfield.data.s32, dst_attr.value.aclfield.data.s32);
break;
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT64:
transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
transfer_primitive(src_attr.value.aclfield.mask.u64, dst_attr.value.aclfield.mask.u64);
transfer_primitive(src_attr.value.aclfield.data.u64, dst_attr.value.aclfield.data.u64);
break;
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_MAC:
transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
transfer_primitive(src_attr.value.aclfield.mask.mac, dst_attr.value.aclfield.mask.mac);
transfer_primitive(src_attr.value.aclfield.data.mac, dst_attr.value.aclfield.data.mac);
break;
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV4:
transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
transfer_primitive(src_attr.value.aclfield.mask.ip4, dst_attr.value.aclfield.mask.ip4);
transfer_primitive(src_attr.value.aclfield.data.ip4, dst_attr.value.aclfield.data.ip4);
break;
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV6:
transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
transfer_primitive(src_attr.value.aclfield.mask.ip6, dst_attr.value.aclfield.mask.ip6);
transfer_primitive(src_attr.value.aclfield.data.ip6, dst_attr.value.aclfield.data.ip6);
break;
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_OBJECT_ID:
transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
transfer_primitive(src_attr.value.aclfield.data.oid, dst_attr.value.aclfield.data.oid);
break;
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_OBJECT_LIST:
transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
RETURN_ON_ERROR(transfer_list(src_attr.value.aclfield.data.objlist, dst_attr.value.aclfield.data.objlist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
transfer_primitive(src_attr.value.aclfield.enable, dst_attr.value.aclfield.enable);
RETURN_ON_ERROR(transfer_list(src_attr.value.aclfield.mask.u8list, dst_attr.value.aclfield.mask.u8list, countOnly));
transfer_list(src_attr.value.aclfield.data.u8list, dst_attr.value.aclfield.data.u8list, countOnly);
break;
/* ACL ACTION DATA */
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_BOOL:
transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
transfer_primitive(src_attr.value.aclaction.parameter.booldata, dst_attr.value.aclaction.parameter.booldata);
break;
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_UINT8:
transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
transfer_primitive(src_attr.value.aclaction.parameter.u8, dst_attr.value.aclaction.parameter.u8);
break;
// case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT8:
// transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
// transfer_primitive(src_attr.value.aclaction.parameter.s8, dst_attr.value.aclaction.parameter.s8);
// break;
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_UINT16:
transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
transfer_primitive(src_attr.value.aclaction.parameter.u16, dst_attr.value.aclaction.parameter.u16);
break;
// case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT16:
// transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
// transfer_primitive(src_attr.value.aclaction.parameter.s16, dst_attr.value.aclaction.parameter.s16);
// break;
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_UINT32:
transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
transfer_primitive(src_attr.value.aclaction.parameter.u32, dst_attr.value.aclaction.parameter.u32);
break;
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT32:
transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
transfer_primitive(src_attr.value.aclaction.parameter.s32, dst_attr.value.aclaction.parameter.s32);
break;
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_MAC:
transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
transfer_primitive(src_attr.value.aclaction.parameter.mac, dst_attr.value.aclaction.parameter.mac);
break;
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_IPV4:
transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
transfer_primitive(src_attr.value.aclaction.parameter.ip4, dst_attr.value.aclaction.parameter.ip4);
break;
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_IPV6:
transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
transfer_primitive(src_attr.value.aclaction.parameter.ip6, dst_attr.value.aclaction.parameter.ip6);
break;
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_IP_ADDRESS:
transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
transfer_primitive(src_attr.value.aclaction.parameter.ipaddr, dst_attr.value.aclaction.parameter.ipaddr);
break;
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_ID:
transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
transfer_primitive(src_attr.value.aclaction.parameter.oid, dst_attr.value.aclaction.parameter.oid);
break;
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_LIST:
transfer_primitive(src_attr.value.aclaction.enable, dst_attr.value.aclaction.enable);
RETURN_ON_ERROR(transfer_list(src_attr.value.aclaction.parameter.objlist, dst_attr.value.aclaction.parameter.objlist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_ACL_CAPABILITY:
transfer_primitive(src_attr.value.aclcapability.is_action_list_mandatory, dst_attr.value.aclcapability.is_action_list_mandatory);
RETURN_ON_ERROR(transfer_list(src_attr.value.aclcapability.action_list, dst_attr.value.aclcapability.action_list, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
transfer_primitive(src_attr.value.sysportconfig, dst_attr.value.sysportconfig);
break;
case SAI_ATTR_VALUE_TYPE_AUTH_KEY:
transfer_primitive(src_attr.value.authkey, dst_attr.value.authkey);
break;
case SAI_ATTR_VALUE_TYPE_MACSEC_AUTH_KEY:
transfer_primitive(src_attr.value.macsecauthkey, dst_attr.value.macsecauthkey);
break;
case SAI_ATTR_VALUE_TYPE_MACSEC_SALT:
transfer_primitive(src_attr.value.macsecsalt, dst_attr.value.macsecsalt);
break;
case SAI_ATTR_VALUE_TYPE_MACSEC_SAK:
transfer_primitive(src_attr.value.macsecsak, dst_attr.value.macsecsak);
break;
case SAI_ATTR_VALUE_TYPE_ENCRYPT_KEY:
transfer_primitive(src_attr.value.encrypt_key, dst_attr.value.encrypt_key);
break;
case SAI_ATTR_VALUE_TYPE_PORT_ERR_STATUS_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.porterror, dst_attr.value.porterror, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_PORT_EYE_VALUES_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.porteyevalues, dst_attr.value.porteyevalues, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_FABRIC_PORT_REACHABILITY:
transfer_primitive(src_attr.value.reachability, dst_attr.value.reachability);
break;
case SAI_ATTR_VALUE_TYPE_PRBS_RX_STATE:
transfer_primitive(src_attr.value.rx_state, dst_attr.value.rx_state);
break;
case SAI_ATTR_VALUE_TYPE_MAP_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.maplist, dst_attr.value.maplist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_TLV_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.tlvlist, dst_attr.value.tlvlist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.sysportconfiglist, dst_attr.value.sysportconfiglist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_IP_PREFIX_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.ipprefixlist, dst_attr.value.ipprefixlist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_PORT_FREQUENCY_OFFSET_PPM_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.portfrequencyoffsetppmlist, dst_attr.value.portfrequencyoffsetppmlist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_PORT_SNR_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.portsnrlist, dst_attr.value.portsnrlist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_ACL_CHAIN_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.aclchainlist, dst_attr.value.aclchainlist, countOnly));
break;
case SAI_ATTR_VALUE_TYPE_POE_PORT_POWER_CONSUMPTION:
transfer_primitive(src_attr.value.portpowerconsumption, dst_attr.value.portpowerconsumption);
break;
default:
SWSS_LOG_THROW("sai attr value %s is not implemented, FIXME", sai_serialize_attr_value_type(serialization_type).c_str());
}
return SAI_STATUS_SUCCESS;
}