From 46ae92a9751a6649f2c4b5303be4ec9c27773885 Mon Sep 17 00:00:00 2001 From: Junhua Zhai Date: Fri, 30 Aug 2024 13:00:12 +0000 Subject: [PATCH] Manually merge #616 and #617 changes in bmv2 --- dash-pipeline/bmv2/dash_headers.p4 | 4 ++-- dash-pipeline/bmv2/dash_metadata.p4 | 1 + dash-pipeline/bmv2/dash_pipeline.p4 | 24 ++++++++++++++++--- dash-pipeline/bmv2/stages/conntrack_lookup.p4 | 4 ++-- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/dash-pipeline/bmv2/dash_headers.p4 b/dash-pipeline/bmv2/dash_headers.p4 index 8b33df509..c0b2772f8 100644 --- a/dash-pipeline/bmv2/dash_headers.p4 +++ b/dash-pipeline/bmv2/dash_headers.p4 @@ -154,7 +154,7 @@ const bit<16> IPV6_HDR_SIZE=320/8; enum bit<16> dash_flow_enabled_key_t { - ENI_ADDR = (1 << 0), + ENI_MAC = (1 << 0), VNI = (1 << 1), PROTOCOL = (1 << 2), SRC_IP = (1 << 3), @@ -173,7 +173,7 @@ enum bit<16> dash_flow_entry_bulk_get_session_mode_t { enum bit<16> dash_flow_entry_bulk_get_session_filter_key_t { INVAILD = 0, FLOW_TABLE_ID = 1, - ENI_ADDR = 2, + ENI_MAC = 2, IP_PROTOCOL = 3, SRC_IP_ADDR = 4, DST_IP_ADDR = 5, diff --git a/dash-pipeline/bmv2/dash_metadata.p4 b/dash-pipeline/bmv2/dash_metadata.p4 index c30999eb2..41bce39ce 100644 --- a/dash-pipeline/bmv2/dash_metadata.p4 +++ b/dash-pipeline/bmv2/dash_metadata.p4 @@ -204,6 +204,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 1f82917c8..0d180b0cd 100644 --- a/dash-pipeline/bmv2/dash_pipeline.p4 +++ b/dash-pipeline/bmv2/dash_pipeline.p4 @@ -235,7 +235,24 @@ control dash_lookup_stage( const default_action = deny; } - action set_appliance(EthernetAddress neighbor_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 accept; + } + const default_action = accept; + } + + action set_underlay_mac(EthernetAddress neighbor_mac, EthernetAddress mac) { meta.encap_data.underlay_dmac = neighbor_mac; meta.encap_data.underlay_smac = mac; @@ -243,13 +260,13 @@ control dash_lookup_stage( /* This table API should be implemented manually using underlay SAI */ @SaiTable[ignored = "true"] - table appliance { + table underlay_mac { key = { meta.appliance_id : ternary; } actions = { - set_appliance; + set_underlay_mac; } } @@ -272,6 +289,7 @@ control dash_lookup_stage( direction_lookup_stage.apply(hdr, meta); appliance.apply(); + underlay_mac.apply(); /* Outer header processing */ eni_lookup_stage.apply(hdr, meta); diff --git a/dash-pipeline/bmv2/stages/conntrack_lookup.p4 b/dash-pipeline/bmv2/stages/conntrack_lookup.p4 index 4510363f1..052e5c889 100644 --- a/dash-pipeline/bmv2/stages/conntrack_lookup.p4 +++ b/dash-pipeline/bmv2/stages/conntrack_lookup.p4 @@ -330,7 +330,7 @@ control conntrack_lookup_stage(inout headers_t hdr, inout metadata_t meta) { hdr.flow_key.setValid(); hdr.flow_key.is_ip_v6 = meta.is_overlay_ip_v6; // TODO remove hardcode flow_enabled_key later - meta.flow_table.flow_enabled_key = dash_flow_enabled_key_t.ENI_ADDR | + meta.flow_table.flow_enabled_key = dash_flow_enabled_key_t.ENI_MAC | dash_flow_enabled_key_t.VNI | dash_flow_enabled_key_t.PROTOCOL | dash_flow_enabled_key_t.SRC_IP | @@ -338,7 +338,7 @@ control conntrack_lookup_stage(inout headers_t hdr, inout metadata_t meta) { dash_flow_enabled_key_t.SRC_PORT | dash_flow_enabled_key_t.DST_PORT; - if (meta.flow_table.flow_enabled_key & dash_flow_enabled_key_t.ENI_ADDR != 0) { + if (meta.flow_table.flow_enabled_key & dash_flow_enabled_key_t.ENI_MAC != 0) { hdr.flow_key.eni_mac = meta.eni_addr; } if (meta.flow_table.flow_enabled_key & dash_flow_enabled_key_t.VNI != 0) {