diff --git a/dash-pipeline/SAI/Makefile b/dash-pipeline/SAI/Makefile index 61908c17f..60d913db4 100644 --- a/dash-pipeline/SAI/Makefile +++ b/dash-pipeline/SAI/Makefile @@ -3,7 +3,7 @@ all: copysrc ./sai_api_gen.py \ /bmv2/dash_pipeline.bmv2/dash_pipeline_p4rt.json \ --ir /bmv2/dash_pipeline.bmv2/dash_pipeline_ir.json \ - --ignore-tables=appliance,eni_meter,slb_decap \ + --ignore-tables=underlay_mac,eni_meter,slb_decap \ --sai-spec-dir=/SAI/specs \ dash diff --git a/dash-pipeline/SAI/specs/dash_appliance.yaml b/dash-pipeline/SAI/specs/dash_appliance.yaml new file mode 100644 index 000000000..4523dae51 --- /dev/null +++ b/dash-pipeline/SAI/specs/dash_appliance.yaml @@ -0,0 +1,35 @@ +!!python/object:utils.sai_spec.sai_api_group.SaiApiGroup +name: dash_appliance +description: DASH appliance +api_type: overlay +sai_apis: +- !!python/object:utils.sai_spec.sai_api.SaiApi + name: dash_appliance + description: DASH appliance + is_object: true + enums: [] + structs: [] + attributes: + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_DASH_APPLIANCE_ATTR_LOCAL_REGION_ID + description: Action parameter local region id + type: sai_uint8_t + attr_value_field: u8 + default: '0' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + valid_only: null + is_vlan: false + deprecated: false + stats: [] + p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta + tables: + - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable + id: 42701762 + actions: + default: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction + name: default + id: 21793905 + attr_param_id: {} diff --git a/dash-pipeline/SAI/specs/sai_spec.yaml b/dash-pipeline/SAI/specs/sai_spec.yaml index ed86286e3..5a4941f40 100644 --- a/dash-pipeline/SAI/specs/sai_spec.yaml +++ b/dash-pipeline/SAI/specs/sai_spec.yaml @@ -14,6 +14,7 @@ api_types: - SAI_API_DASH_VIP - SAI_API_DASH_TUNNEL - SAI_API_DASH_FLOW +- SAI_API_DASH_APPLIANCE object_types: - SAI_OBJECT_TYPE_DASH_ACL_GROUP - SAI_OBJECT_TYPE_DASH_ACL_RULE @@ -39,6 +40,7 @@ object_types: - SAI_OBJECT_TYPE_FLOW_ENTRY_BULK_GET_SESSION_FILTER - SAI_OBJECT_TYPE_FLOW_ENTRY_BULK_GET_SESSION - SAI_OBJECT_TYPE_METER_BUCKET_ENTRY +- SAI_OBJECT_TYPE_DASH_APPLIANCE object_entries: - !!python/object:utils.sai_spec.sai_struct_entry.SaiStructEntry name: direction_lookup_entry @@ -489,3 +491,4 @@ api_groups: - !inc '/SAI/specs/dash_vip.yaml' - !inc '/SAI/specs/dash_tunnel.yaml' - !inc '/SAI/specs/dash_flow.yaml' +- !inc '/SAI/specs/dash_appliance.yaml' diff --git a/dash-pipeline/bmv2/dash_metadata.p4 b/dash-pipeline/bmv2/dash_metadata.p4 index 48f01561c..07a0a31cf 100644 --- a/dash-pipeline/bmv2/dash_metadata.p4 +++ b/dash-pipeline/bmv2/dash_metadata.p4 @@ -320,6 +320,7 @@ struct metadata_t { overlay_rewrite_data_t overlay_data; bit<16> dash_tunnel_id; bit<32> meter_class; + bit<8> local_region_id; } #endif /* _SIRIUS_METADATA_P4_ */ diff --git a/dash-pipeline/bmv2/dash_pipeline.p4 b/dash-pipeline/bmv2/dash_pipeline.p4 index 0113ec195..0d413e538 100644 --- a/dash-pipeline/bmv2/dash_pipeline.p4 +++ b/dash-pipeline/bmv2/dash_pipeline.p4 @@ -59,21 +59,38 @@ control dash_ingress( const default_action = deny; } - action set_appliance(EthernetAddress neighbor_mac, - EthernetAddress mac) { + action set_appliance(bit<8> local_region_id) { + meta.local_region_id = local_region_id; + } + + @SaiTable[name = "dash_appliance", api = "dash_appliance", order = 0, isobject="true"] + table appliance { + key = { + meta.appliance_id : exact @SaiVal[type="sai_object_id_t"]; + } + + actions = { + set_appliance; + @defaultonly deny; + } + const default_action = deny; + } + + action set_underlay_mac(EthernetAddress neighbor_mac, + EthernetAddress mac) { meta.encap_data.underlay_dmac = neighbor_mac; meta.encap_data.underlay_smac = mac; } /* This table API should be implemented manually using underlay SAI */ @SaiTable[ignored = "true"] - table appliance { + table underlay_mac { key = { - meta.appliance_id : ternary; + meta.appliance_id : exact; } actions = { - set_appliance; + set_underlay_mac; } } @@ -283,6 +300,7 @@ control dash_ingress( direction_lookup_stage.apply(hdr, meta); appliance.apply(); + underlay_mac.apply(); /* Outer header processing */ eni_lookup_stage.apply(hdr, meta);