From 4d95d6d581740bc3f5c667fa86e09a6a134ca2ac Mon Sep 17 00:00:00 2001 From: r12f Date: Mon, 27 May 2024 19:58:59 +0000 Subject: [PATCH] sai spec poc. --- dash-pipeline/SAI/Makefile | 1 + dash-pipeline/SAI/dash_sai_spec.yaml | 2222 +++++++++++++++++ dash-pipeline/SAI/sai_api_gen.py | 9 + .../SAI/utils/dash_p4/dash_p4_table.py | 91 +- .../utils/dash_p4/dash_p4_table_attribute.py | 12 +- .../SAI/utils/dash_p4/dash_p4_table_group.py | 15 + .../dockerfiles/Dockerfile.saithrift-bldr | 2 +- 7 files changed, 2311 insertions(+), 41 deletions(-) create mode 100644 dash-pipeline/SAI/dash_sai_spec.yaml diff --git a/dash-pipeline/SAI/Makefile b/dash-pipeline/SAI/Makefile index 0403e8101..a920e4c56 100644 --- a/dash-pipeline/SAI/Makefile +++ b/dash-pipeline/SAI/Makefile @@ -4,6 +4,7 @@ all: copysrc /bmv2/dash_pipeline.bmv2/dash_pipeline_p4rt.json \ --ir /bmv2/dash_pipeline.bmv2/dash_pipeline_ir.json \ --ignore-tables=appliance,eni_meter,slb_decap \ + --output-sai-spec=/SAI/dash_sai_spec.yaml \ dash copysrc: diff --git a/dash-pipeline/SAI/dash_sai_spec.yaml b/dash-pipeline/SAI/dash_sai_spec.yaml new file mode 100644 index 000000000..bf2ec1a3c --- /dev/null +++ b/dash-pipeline/SAI/dash_sai_spec.yaml @@ -0,0 +1,2222 @@ +!!python/object:utils.sai_spec.sai_spec.SaiSpec +api_groups: +- !!python/object:utils.sai_spec.sai_api_group.SaiApiGroup + name: dash_acl + description: '' + sai_apis: + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: dash_acl_group + description: '' + is_object: true + enums: [] + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_DASH_ACL_GROUP_IP_ADDR_FAMILY + description: '' + type: sai_ip_addr_family_t + attr_value_field: u32 + default: SAI_IP_ADDR_FAMILY_IPV4 + isresourcetype: true + flags: CREATE_AND_SET + object_name: null + allow_null: false + stats: [] + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: dash_acl_rule + description: '' + is_object: true + enums: + - !!python/object:utils.sai_spec.sai_enum.SaiEnum + name: sai_dash_acl_rule_action_t + description: Attribute data for SAI_DASH_ACL_RULE_ATTR_ACTION + members: + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_DASH_ACL_RULE_ACTION_PERMIT + description: '' + value: '0' + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE + description: '' + value: '0' + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_DASH_ACL_RULE_ACTION_DENY + description: '' + value: '0' + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE + description: '' + value: '0' + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_DASH_ACL_RULE_ATTR_ACTION + description: Action + type: sai_dash_acl_rule_action_t + attr_value_field: null + default: SAI_DASH_ACL_RULE_ACTION_PERMIT + isresourcetype: false + flags: MANDATORY_ON_CREATE | CREATE_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_DASH_ACL_RULE_ATTR_COUNTER_ID + description: Attach a counter. When it is empty, then packet hits won't be counted. + type: sai_object_id_t + attr_value_field: null + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_COUNTER + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_DASH_ACL_RULE_ATTR_PRIORITY + description: Rule priority in table + type: sai_uint32_t + attr_value_field: null + default: null + isresourcetype: false + flags: MANDATORY_ON_CREATE | CREATE_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_DASH_ACL_RULE_ATTR_IP_ADDR_FAMILY + description: IP address family for resource accounting + type: sai_ip_addr_family_t + attr_value_field: null + default: null + isresourcetype: true + flags: READ_ONLY + object_name: null + allow_null: false + stats: [] +- !!python/object:utils.sai_spec.sai_api_group.SaiApiGroup + name: dash_direction_lookup + description: '' + sai_apis: + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: direction_lookup_entry + description: '' + is_object: false + enums: + - !!python/object:utils.sai_spec.sai_enum.SaiEnum + name: sai_direction_lookup_entry_action_t + description: Attribute data for SAI_DIRECTION_LOOKUP_ENTRY_ATTR_ACTION + members: + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION + description: '' + value: '0' + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_DIRECTION_LOOKUP_ENTRY_ATTR_ACTION + description: Action + type: sai_direction_lookup_entry_action_t + attr_value_field: null + default: SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION + isresourcetype: false + flags: MANDATORY_ON_CREATE | CREATE_ONLY + object_name: null + allow_null: false + stats: [] +- !!python/object:utils.sai_spec.sai_api_group.SaiApiGroup + name: dash_eni + description: '' + sai_apis: + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: eni_ether_address_map_entry + description: '' + is_object: false + enums: + - !!python/object:utils.sai_spec.sai_enum.SaiEnum + name: sai_eni_ether_address_map_entry_action_t + description: Attribute data for SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ACTION + members: + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ACTION_SET_ENI + description: '' + value: '0' + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ACTION + description: Action + type: sai_eni_ether_address_map_entry_action_t + attr_value_field: null + default: SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ACTION_SET_ENI + isresourcetype: false + flags: MANDATORY_ON_CREATE | CREATE_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ENI_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_ENI + allow_null: true + stats: [] + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: eni + description: '' + is_object: true + enums: [] + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_CPS + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_PPS + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_FLOWS + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_ADMIN_STATE + description: '' + type: bool + attr_value_field: booldata + default: 'false' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_HA_SCOPE_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_HA_SCOPE + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_VM_UNDERLAY_DIP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_VM_VNI + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_VNET_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_VNET + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_PL_SIP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_PL_SIP_MASK + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_PL_UNDERLAY_SIP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_V4_METER_POLICY_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_METER_POLICY + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_V6_METER_POLICY_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_METER_POLICY + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_DASH_TUNNEL_DSCP_MODE + description: '' + type: sai_dash_tunnel_dscp_mode_t + attr_value_field: s32 + default: SAI_DASH_TUNNEL_DSCP_MODE_PRESERVE_MODEL + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_DSCP + description: '' + type: sai_uint8_t + attr_value_field: u8 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_V4_STAGE1_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_V4_STAGE2_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_V4_STAGE3_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_V4_STAGE4_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_V4_STAGE5_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_V6_STAGE1_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_V6_STAGE2_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_V6_STAGE3_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_V6_STAGE4_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_V6_STAGE5_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_V4_STAGE1_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_V4_STAGE2_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_V4_STAGE3_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_V4_STAGE4_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_V4_STAGE5_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_V6_STAGE1_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_V6_STAGE2_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_V6_STAGE3_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_V6_STAGE4_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_V6_STAGE5_DASH_ACL_GROUP_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_DASH_ACL_GROUP + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_DISABLE_FAST_PATH_ICMP_FLOW_REDIRECTION + description: '' + type: bool + attr_value_field: booldata + default: 'false' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + stats: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_ROUTING_ENTRY_MISS_DROP_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_CA_PA_ENTRY_MISS_DROP_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_FLOW_CREATED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_FLOW_CREATE_FAILED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_FLOW_UPDATED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_FLOW_UPDATE_FAILED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_FLOW_DELETED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_FLOW_DELETE_FAILED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_FLOW_AGED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_SYNC_PACKET_RX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_SYNC_PACKET_RX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_SYNC_PACKET_TX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_SYNC_PACKET_TX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_SYNC_PACKET_RX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_SYNC_PACKET_RX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_SYNC_PACKET_TX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_SYNC_PACKET_TX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_CREATE_REQ_SENT + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_CREATE_REQ_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_CREATE_REQ_FAILED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_CREATE_ACK_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_CREATE_ACK_FAILED_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_CREATE_ACK_IGNORED_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_CREATE_REQ_SENT + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_CREATE_REQ_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_CREATE_REQ_FAILED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_CREATE_ACK_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_CREATE_ACK_FAILED_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_CREATE_ACK_IGNORED_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_UPDATE_REQ_SENT + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_UPDATE_REQ_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_UPDATE_REQ_FAILED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_UPDATE_ACK_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_UPDATE_ACK_FAILED_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_UPDATE_ACK_IGNORED_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_UPDATE_REQ_SENT + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_UPDATE_REQ_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_UPDATE_REQ_FAILED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_UPDATE_ACK_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_UPDATE_ACK_FAILED_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_UPDATE_ACK_IGNORED_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_DELETE_REQ_SENT + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_DELETE_REQ_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_DELETE_REQ_FAILED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_DELETE_ACK_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_DELETE_ACK_FAILED_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INLINE_FLOW_DELETE_ACK_IGNORED_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_DELETE_REQ_SENT + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_DELETE_REQ_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_DELETE_REQ_FAILED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_DELETE_ACK_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_DELETE_ACK_FAILED_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TIMED_FLOW_DELETE_ACK_IGNORED_RECV + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_RX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_RX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_TX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_RX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_RX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_TX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_OUTBOUND_TX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_RX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_RX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_TX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_TX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_LB_FAST_PATH_ICMP_IN_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_LB_FAST_PATH_ICMP_IN_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_INBOUND_ROUTING_ENTRY_MISS_DROP_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false +- !!python/object:utils.sai_spec.sai_api_group.SaiApiGroup + name: dash_ha + description: '' + sai_apis: + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: ha_set + description: '' + is_object: true + enums: [] + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_LOCAL_IP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_PEER_IP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_CP_DATA_CHANNEL_PORT + description: '' + type: sai_uint16_t + attr_value_field: u16 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_CHANNEL_DST_PORT + description: '' + type: sai_uint16_t + attr_value_field: u16 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_CHANNEL_MIN_SRC_PORT + description: '' + type: sai_uint16_t + attr_value_field: u16 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_CHANNEL_MAX_SRC_PORT + description: '' + type: sai_uint16_t + attr_value_field: u16 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_CHANNEL_PROBE_INTERVAL_MS + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_CHANNEL_PROBE_FAIL_THRESHOLD + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_CHANNEL_IS_ALIVE + description: '' + type: bool + attr_value_field: booldata + default: 'false' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + stats: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_PROBE_REQ_RX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_PROBE_REQ_RX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_PROBE_REQ_TX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_PROBE_REQ_TX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_PROBE_ACK_RX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_PROBE_ACK_RX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_PROBE_ACK_TX_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_PROBE_ACK_TX_PACKETS + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_DP_PROBE_FAILED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_CP_DATA_CHANNEL_CONNECT_ATTEMPTED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_CP_DATA_CHANNEL_CONNECT_RECEIVED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_CP_DATA_CHANNEL_CONNECT_SUCCEEDED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_CP_DATA_CHANNEL_CONNECT_FAILED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_CP_DATA_CHANNEL_CONNECT_REJECTED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_CP_DATA_CHANNEL_TIMEOUT_COUNT + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_BULK_SYNC_MESSAGE_RECEIVED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_BULK_SYNC_MESSAGE_SENT + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_BULK_SYNC_MESSAGE_SEND_FAILED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_BULK_SYNC_FLOW_RECEIVED + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SET_BULK_SYNC_FLOW_SENT + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: ha_scope + description: '' + is_object: true + enums: [] + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SCOPE_HA_SET_ID + description: '' + type: sai_uint16_t + attr_value_field: u16 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SCOPE_DASH_HA_ROLE + description: '' + type: sai_dash_ha_role_t + attr_value_field: s32 + default: SAI_DASH_HA_ROLE_DEAD + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SCOPE_FLOW_VERSION + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SCOPE_FLOW_RECONCILE_REQUESTED + description: '' + type: bool + attr_value_field: booldata + default: 'false' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_HA_SCOPE_FLOW_RECONCILE_NEEDED + description: '' + type: bool + attr_value_field: booldata + default: 'false' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + stats: [] +- !!python/object:utils.sai_spec.sai_api_group.SaiApiGroup + name: dash_inbound_routing + description: '' + sai_apis: + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: inbound_routing_entry + description: '' + is_object: false + enums: + - !!python/object:utils.sai_spec.sai_enum.SaiEnum + name: sai_inbound_routing_entry_action_t + description: Attribute data for SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION + members: + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_INBOUND_ROUTING_ENTRY_ACTION_TUNNEL_DECAP + description: '' + value: '0' + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_INBOUND_ROUTING_ENTRY_ACTION_TUNNEL_DECAP_PA_VALIDATE + description: '' + value: '0' + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP + description: '' + value: '0' + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP_PA_VALIDATE + description: '' + value: '0' + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_INBOUND_ROUTING_ENTRY_ATTR_ACTION + description: Action + type: sai_inbound_routing_entry_action_t + attr_value_field: null + default: SAI_INBOUND_ROUTING_ENTRY_ACTION_TUNNEL_DECAP + isresourcetype: false + flags: MANDATORY_ON_CREATE | CREATE_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_INBOUND_ROUTING_ENTRY_METER_CLASS_OR + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_INBOUND_ROUTING_ENTRY_METER_CLASS_AND + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '4294967295' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_INBOUND_ROUTING_ENTRY_SRC_VNET_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_VNET + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_INBOUND_ROUTING_ENTRY_ATTR_IP_ADDR_FAMILY + description: IP address family for resource accounting + type: sai_ip_addr_family_t + attr_value_field: null + default: null + isresourcetype: true + flags: READ_ONLY + object_name: null + allow_null: false + stats: [] +- !!python/object:utils.sai_spec.sai_api_group.SaiApiGroup + name: dash_meter + description: '' + sai_apis: + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: meter_bucket + description: '' + is_object: true + enums: [] + structs: [] + attributes: [] + stats: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_METER_BUCKET_OUTBOUND_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_METER_BUCKET_INBOUND_BYTES + description: '' + type: sai_uint64_t + attr_value_field: u64 + default: '0' + isresourcetype: false + flags: READ_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: meter_policy + description: '' + is_object: true + enums: [] + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_METER_POLICY_IP_ADDR_FAMILY + description: '' + type: sai_ip_addr_family_t + attr_value_field: u32 + default: SAI_IP_ADDR_FAMILY_IPV4 + isresourcetype: true + flags: CREATE_AND_SET + object_name: null + allow_null: false + stats: [] + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: meter_rule + description: '' + is_object: true + enums: [] + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_METER_RULE_METER_CLASS + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_METER_RULE_ATTR_PRIORITY + description: Rule priority in table + type: sai_uint32_t + attr_value_field: null + default: null + isresourcetype: false + flags: MANDATORY_ON_CREATE | CREATE_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_METER_RULE_ATTR_IP_ADDR_FAMILY + description: IP address family for resource accounting + type: sai_ip_addr_family_t + attr_value_field: null + default: null + isresourcetype: true + flags: READ_ONLY + object_name: null + allow_null: false + stats: [] +- !!python/object:utils.sai_spec.sai_api_group.SaiApiGroup + name: dash_outbound_ca_to_pa + description: '' + sai_apis: + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: outbound_ca_to_pa_entry + description: '' + is_object: false + enums: + - !!python/object:utils.sai_spec.sai_enum.SaiEnum + name: sai_outbound_ca_to_pa_entry_action_t + description: Attribute data for SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_ACTION + members: + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_ACTION_SET_TUNNEL_MAPPING + description: '' + value: '0' + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_ACTION_SET_PRIVATE_LINK_MAPPING + description: '' + value: '0' + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_ACTION + description: Action + type: sai_outbound_ca_to_pa_entry_action_t + attr_value_field: null + default: SAI_OUTBOUND_CA_TO_PA_ENTRY_ACTION_SET_TUNNEL_MAPPING + isresourcetype: false + flags: MANDATORY_ON_CREATE | CREATE_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_UNDERLAY_DIP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_OVERLAY_DMAC + description: '' + type: sai_mac_t + attr_value_field: mac + default: vendor + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_USE_DST_VNET_VNI + description: '' + type: bool + attr_value_field: booldata + default: 'false' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_METER_CLASS_OR + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_OVERLAY_SIP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_OVERLAY_DIP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_DASH_ENCAPSULATION + description: '' + type: sai_dash_encapsulation_t + attr_value_field: s32 + default: SAI_DASH_ENCAPSULATION_INVALID + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_TUNNEL_KEY + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_COUNTER_ID + description: Attach a counter. When it is empty, then packet hits won't be counted. + type: sai_object_id_t + attr_value_field: null + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_COUNTER + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_IP_ADDR_FAMILY + description: IP address family for resource accounting + type: sai_ip_addr_family_t + attr_value_field: null + default: null + isresourcetype: true + flags: READ_ONLY + object_name: null + allow_null: false + stats: [] +- !!python/object:utils.sai_spec.sai_api_group.SaiApiGroup + name: dash_vnet + description: '' + sai_apis: + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: vnet + description: '' + is_object: true + enums: [] + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_VNET_VNI + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + stats: [] +- !!python/object:utils.sai_spec.sai_api_group.SaiApiGroup + name: dash_outbound_routing + description: '' + sai_apis: + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: outbound_routing_entry + description: '' + is_object: false + enums: + - !!python/object:utils.sai_spec.sai_enum.SaiEnum + name: sai_outbound_routing_entry_action_t + description: Attribute data for SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION + members: + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET + description: '' + value: '0' + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET_DIRECT + description: '' + value: '0' + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_DIRECT + description: '' + value: '0' + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_SERVICE_TUNNEL + description: '' + value: '0' + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_OUTBOUND_ROUTING_ENTRY_ACTION_DROP + description: '' + value: '0' + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION + description: Action + type: sai_outbound_routing_entry_action_t + attr_value_field: null + default: SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET + isresourcetype: false + flags: MANDATORY_ON_CREATE | CREATE_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_DST_VNET_ID + description: '' + type: sai_object_id_t + attr_value_field: u16 + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_VNET + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_METER_CLASS_OR + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_METER_CLASS_AND + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '4294967295' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_OVERLAY_IP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_OVERLAY_DIP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_OVERLAY_DIP_MASK + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_OVERLAY_SIP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_OVERLAY_SIP_MASK + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_UNDERLAY_DIP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_UNDERLAY_SIP + description: '' + type: sai_ip_address_t + attr_value_field: ipaddr + default: 0.0.0.0 + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_DASH_ENCAPSULATION + description: '' + type: sai_dash_encapsulation_t + attr_value_field: s32 + default: SAI_DASH_ENCAPSULATION_VXLAN + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_TUNNEL_KEY + description: '' + type: sai_uint32_t + attr_value_field: u32 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_ATTR_COUNTER_ID + description: Attach a counter. When it is empty, then packet hits won't be counted. + type: sai_object_id_t + attr_value_field: null + default: SAI_NULL_OBJECT_ID + isresourcetype: false + flags: CREATE_AND_SET + object_name: SAI_OBJECT_TYPE_COUNTER + allow_null: true + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_OUTBOUND_ROUTING_ENTRY_ATTR_IP_ADDR_FAMILY + description: IP address family for resource accounting + type: sai_ip_addr_family_t + attr_value_field: null + default: null + isresourcetype: true + flags: READ_ONLY + object_name: null + allow_null: false + stats: [] +- !!python/object:utils.sai_spec.sai_api_group.SaiApiGroup + name: dash_pa_validation + description: '' + sai_apis: + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: pa_validation_entry + description: '' + is_object: false + enums: + - !!python/object:utils.sai_spec.sai_enum.SaiEnum + name: sai_pa_validation_entry_action_t + description: Attribute data for SAI_PA_VALIDATION_ENTRY_ATTR_ACTION + members: + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT + description: '' + value: '0' + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_PA_VALIDATION_ENTRY_ATTR_ACTION + description: Action + type: sai_pa_validation_entry_action_t + attr_value_field: null + default: SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT + isresourcetype: false + flags: MANDATORY_ON_CREATE | CREATE_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_PA_VALIDATION_ENTRY_ATTR_IP_ADDR_FAMILY + description: IP address family for resource accounting + type: sai_ip_addr_family_t + attr_value_field: null + default: null + isresourcetype: true + flags: READ_ONLY + object_name: null + allow_null: false + stats: [] +- !!python/object:utils.sai_spec.sai_api_group.SaiApiGroup + name: route + description: '' + sai_apis: + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: route_entry + description: '' + is_object: false + enums: + - !!python/object:utils.sai_spec.sai_enum.SaiEnum + name: sai_route_entry_action_t + description: Attribute data for SAI_ROUTE_ENTRY_ATTR_ACTION + members: + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_ROUTE_ENTRY_ACTION_PKT_ACT + description: '' + value: '0' + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ROUTE_ENTRY_ATTR_ACTION + description: Action + type: sai_route_entry_action_t + attr_value_field: null + default: SAI_ROUTE_ENTRY_ACTION_PKT_ACT + isresourcetype: false + flags: MANDATORY_ON_CREATE | CREATE_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ROUTE_ENTRY_PACKET_ACTION + description: '' + type: sai_uint16_t + attr_value_field: u16 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ROUTE_ENTRY_NEXT_HOP_ID + description: '' + type: sai_uint16_t + attr_value_field: u16 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ROUTE_ENTRY_ATTR_IP_ADDR_FAMILY + description: IP address family for resource accounting + type: sai_ip_addr_family_t + attr_value_field: null + default: null + isresourcetype: true + flags: READ_ONLY + object_name: null + allow_null: false + stats: [] +- !!python/object:utils.sai_spec.sai_api_group.SaiApiGroup + name: dash_vip + description: '' + sai_apis: + - !!python/object:utils.sai_spec.sai_api.SaiApi + name: vip_entry + description: '' + is_object: false + enums: + - !!python/object:utils.sai_spec.sai_enum.SaiEnum + name: sai_vip_entry_action_t + description: Attribute data for SAI_VIP_ENTRY_ATTR_ACTION + members: + - !!python/object:utils.sai_spec.sai_enum_member.SaiEnumMember + name: SAI_VIP_ENTRY_ACTION_ACCEPT + description: '' + value: '0' + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_VIP_ENTRY_ATTR_ACTION + description: Action + type: sai_vip_entry_action_t + attr_value_field: null + default: SAI_VIP_ENTRY_ACTION_ACCEPT + isresourcetype: false + flags: MANDATORY_ON_CREATE | CREATE_ONLY + object_name: null + allow_null: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_VIP_ENTRY_ATTR_IP_ADDR_FAMILY + description: IP address family for resource accounting + type: sai_ip_addr_family_t + attr_value_field: null + default: null + isresourcetype: true + flags: READ_ONLY + object_name: null + allow_null: false + stats: [] diff --git a/dash-pipeline/SAI/sai_api_gen.py b/dash-pipeline/SAI/sai_api_gen.py index 692953d9a..82a696e7a 100755 --- a/dash-pipeline/SAI/sai_api_gen.py +++ b/dash-pipeline/SAI/sai_api_gen.py @@ -8,6 +8,7 @@ import re import jinja2 import typing + import yaml import jsonpath_ng.ext as jsonpath_ext import jsonpath_ng as jsonpath from utils.dash_p4 import DashP4SAIExtensions @@ -26,6 +27,7 @@ parser.add_argument("--ir", type=str, help="Path to P4 program IR JSON file") parser.add_argument("--print-sai-lib", type=bool) parser.add_argument("--ignore-tables", type=str, default="", help="Comma separated list of tables to ignore") + parser.add_argument("--output-sai-spec", type=str, help="Path to output SAI spec file") args = parser.parse_args() p4rt_file_path = os.path.realpath(args.filepath) @@ -48,5 +50,12 @@ print("Dumping parsed SAI data:") print(json.dumps(dash_sai_exts, indent=2)) + # Output SAI spec + sai_spec = dash_sai_exts.to_sai() + if args.output_sai_spec: + output_sai_spec_path = os.path.realpath(args.output_sai_spec) + with open(output_sai_spec_path, "w") as f: + f.write(yaml.dump(sai_spec, indent=2, sort_keys=False)) + # Generate and update all SAI files SAIGenerator(dash_sai_exts).generate() diff --git a/dash-pipeline/SAI/utils/dash_p4/dash_p4_table.py b/dash-pipeline/SAI/utils/dash_p4/dash_p4_table.py index 396f3bb31..a3edc5af0 100644 --- a/dash-pipeline/SAI/utils/dash_p4/dash_p4_table.py +++ b/dash-pipeline/SAI/utils/dash_p4/dash_p4_table.py @@ -5,7 +5,7 @@ from .dash_p4_table_action_param import * from .dash_p4_table_key import * from .dash_p4_table_action import * -from ..sai_spec import SaiApi +from ..sai_spec import SaiApi, SaiEnum, SaiEnumMember, SaiAttribute @dash_p4rt_parser @@ -208,7 +208,7 @@ def post_parsing_process(self, all_table_names: List[str]) -> None: self.__update_table_param_object_name_reference(all_table_names) self.__build_sai_attributes_after_parsing() - def __update_table_param_object_name_reference(self, all_table_names) -> None: + def __update_table_param_object_name_reference(self, all_table_names: List[str]) -> None: # Update object name reference for action params for param in self.action_params: if param.type == "sai_object_id_t": @@ -261,77 +261,94 @@ def to_sai(self) -> SaiApi: self.create_sai_attributes(sai_api) self.create_sai_stats(sai_api) + # TODO: Struct + return sai_api - + def create_sai_action_enum(self, sai_api: SaiApi) -> None: # If the table represents an SAI object, it should not have an action enum. # If the table has only 1 action, we don't need to create the action enum. if len(self.actions) <= 1 and self.is_object != "false": return - action_enum_members = [ - f"SAI_{self.name.upper()}_ACTION_{action.name.upper()}" - for action in self.actions - ] + action_enum_member_value = 0 + action_enum_members: List[SaiEnumMember] = [] + for action in self.actions: + action_enum_members.append( + SaiEnumMember( + name=f"SAI_{self.name.upper()}_ACTION_{action.name.upper()}", + description="", + value=str(action_enum_member_value), + ) + ) + + action_enum_type_name = f"sai_{self.name.lower()}_action_t" action_enum = SaiEnum( - name = f"sai_{self.name.upper()}_action_t", - description = f"Attribute data for SAI_{ self.name.upper() }_ATTR_ACTION", - members = action_enum_members + name=action_enum_type_name, + description=f"Attribute data for SAI_{ self.name.upper() }_ATTR_ACTION", + members=action_enum_members, ) - sai_api.enums.append(action_enum) sai_attr_action = SaiAttribute( - name = f"SAI_{self.name.upper()}_ATTR_ACTION", - description = "Action", - type = f"sai_{self.name.lower()}_action_t", - flags = "MANDATORY_ON_CREATE | CREATE_ONLY" + name=f"SAI_{self.name.upper()}_ATTR_ACTION", + description="Action", + type=action_enum_type_name, + flags="MANDATORY_ON_CREATE | CREATE_ONLY", + default=action_enum_members[0].name, ) - sai_api.attributes.append(sai_attr_action) def create_sai_stats(self, sai_api: SaiApi) -> None: - sai_api.stats = [counter.to_sai() for counter in self.counters if counter.attr_type == "stats"] + sai_api.stats = [ + counter.to_sai(self.name) + for counter in self.counters + if counter.attr_type == "stats" + ] def create_sai_attributes(self, sai_api: SaiApi) -> None: - sai_api.attributes.extend([attr.to_sai() for attr in self.sai_attributes if attr.skipattr != "true"]) + sai_api.attributes.extend( + [attr.to_sai(self.name) for attr in self.sai_attributes if attr.skipattr != "true"] + ) # If the table has an counter attached, we need to create a counter attribute for it. # The counter attribute only counts that packets that hits any entry, but not the packet that misses all entries. - if self.with_counters == 'true': + if self.with_counters == "true": counter_attr = SaiAttribute( - name = f"SAI_{self.name.upper()}_ATTR_COUNTER_ID", - description = "Attach a counter. When it is empty, then packet hits won't be counted.", - type = "sai_object_id_t", - default = "SAI_NULL_OBJECT_ID" - object_name = "SAI_OBJECT_TYPE_COUNTER", - allownull = True, + name=f"SAI_{self.name.upper()}_ATTR_COUNTER_ID", + description="Attach a counter. When it is empty, then packet hits won't be counted.", + type="sai_object_id_t", + default="SAI_NULL_OBJECT_ID", + object_name="SAI_OBJECT_TYPE_COUNTER", + allow_null=True, ) sai_api.attributes.append(counter_attr) if self.is_object == "true": # If any match key in this table supports priority, we need to add a priority attribute. - if any([key.match_type != "exact" for key in self.keys]) and all([key.match_type != "lpm" for key in self.keys]): + if any([key.match_type != "exact" for key in self.keys]) and all( + [key.match_type != "lpm" for key in self.keys] + ): priority_attr = SaiAttribute( - name = f"SAI_{self.name.upper()}_ATTR_PRIORITY", - description = "Rule priority in table", - type = "sai_uint32_t", - flags = "MANDATORY_ON_CREATE | CREATE_ONLY" + name=f"SAI_{self.name.upper()}_ATTR_PRIORITY", + description="Rule priority in table", + type="sai_uint32_t", + flags="MANDATORY_ON_CREATE | CREATE_ONLY", ) sai_api.attributes.append(priority_attr) # If any match key contains an IP address, we need to add an IP address family attribute # for IPv4 and IPv6 support. - if self.ipaddr_family_attr == 'true': + if self.ipaddr_family_attr == "true": ip_addr_family_attr = SaiAttribute( - name = f"SAI_{self.name.upper()}_ATTR_IP_ADDR_FAMILY", - description = "IP address family for resource accounting", - type = "sai_ip_addr_family_t", - flags = "READ_ONLY", - isresourcetype = True + name=f"SAI_{self.name.upper()}_ATTR_IP_ADDR_FAMILY", + description="IP address family for resource accounting", + type="sai_ip_addr_family_t", + flags="READ_ONLY", + isresourcetype=True, ) - + sai_api.attributes.append(ip_addr_family_attr) diff --git a/dash-pipeline/SAI/utils/dash_p4/dash_p4_table_attribute.py b/dash-pipeline/SAI/utils/dash_p4/dash_p4_table_attribute.py index a7a693e44..c95706869 100644 --- a/dash-pipeline/SAI/utils/dash_p4/dash_p4_table_attribute.py +++ b/dash-pipeline/SAI/utils/dash_p4/dash_p4_table_attribute.py @@ -90,16 +90,22 @@ def set_sai_type(self, sai_type_info: SAITypeInfo) -> None: if self.default == None: self.default = sai_type_info.default - def to_sai(self) -> SaiAttribute: + # + # Functions for generating SAI spec + # + def to_sai(self, table_name: str) -> SaiAttribute: + object_name = f"SAI_OBJECT_TYPE_{self.object_name.upper()}" if self.object_name else None sai_flags = "READ_ONLY" if self.isreadonly == "true" else "CREATE_AND_SET" + allow_null = True if self.type == "sai_object_id_t" else False return SaiAttribute( - name = self.name, + name = f"SAI_{table_name.upper()}_{self.name.upper()}", description = "", type = self.type, attr_value_field = self.field, default = self.default, isresourcetype = self.isresourcetype == "true", flags = sai_flags, - object_name = self.object_name, + object_name = object_name, + allow_null = allow_null, ) \ No newline at end of file diff --git a/dash-pipeline/SAI/utils/dash_p4/dash_p4_table_group.py b/dash-pipeline/SAI/utils/dash_p4/dash_p4_table_group.py index 8a3b7a902..c74f6c8b4 100644 --- a/dash-pipeline/SAI/utils/dash_p4/dash_p4_table_group.py +++ b/dash-pipeline/SAI/utils/dash_p4/dash_p4_table_group.py @@ -25,8 +25,23 @@ def add_table(self, table: DashP4Table) -> None: self.tables.append(table) def post_parsing_process(self, all_table_names: List[str]) -> None: + self._deduplicate_tables() + for table in self.tables: table.post_parsing_process(all_table_names) + + def _deduplicate_tables(self) -> None: + table_names = set() + + tables = [] + for table in self.tables: + if table.name in table_names: + table.ignored = True + else: + table_names.add(table.name) + tables.append(table) + + self.tables = tables def to_sai(self) -> SaiApiGroup: sai_api_group = SaiApiGroup(self.app_name, "") diff --git a/dash-pipeline/dockerfiles/Dockerfile.saithrift-bldr b/dash-pipeline/dockerfiles/Dockerfile.saithrift-bldr index c8233327a..923851cb4 100644 --- a/dash-pipeline/dockerfiles/Dockerfile.saithrift-bldr +++ b/dash-pipeline/dockerfiles/Dockerfile.saithrift-bldr @@ -27,7 +27,7 @@ ENV DASH_SAIGEN_DEPS python3 python3-pip RUN apt-get update -q && \ apt-get install -y --no-install-recommends $SAI_PTF_DEPS $DASH_SAIGEN_DEPS && \ - pip3 install ctypesgen jinja2 jsonpath-ng + pip3 install ctypesgen jinja2 jsonpath-ng pyyaml ENV SAI_THRIFT_DEPS automake bison flex g++ git libboost-all-dev libevent-dev libssl-dev libtool make pkg-config