diff --git a/dash-pipeline/Makefile b/dash-pipeline/Makefile index 1b57b62c1..daf3a7713 100644 --- a/dash-pipeline/Makefile +++ b/dash-pipeline/Makefile @@ -5,7 +5,6 @@ ifeq ($(HAVE_DPAPP),y) DPAPP_LINK = veth4 DPAPP_LINK_PEER = veth5 SWITCH_PORT_DPAPP = --interface 2@$(DPAPP_LINK) -D_DPAPP_CONNTRACK = -DDPAPP_CONNTRACK endif mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) @@ -130,7 +129,6 @@ $(P4_OUTDIR)/dash_pipeline_p4rt.txt: $(P4_SRC) -w / \ $(DOCKER_P4C_BMV2_IMG) p4c-bm2-ss \ -DTARGET_BMV2_V1MODEL \ - $(D_DPAPP_CONNTRACK) \ $(P4_MAIN) \ -o $(P4_OUTDIR)/dash_pipeline.json \ --p4runtime-files $(P4_OUTDIR)/dash_pipeline_p4rt.json,$(P4_OUTDIR)/dash_pipeline_p4rt.txt \ diff --git a/dash-pipeline/SAI/specs/dash_acl.yaml b/dash-pipeline/SAI/specs/dash_acl.yaml index 378ccb2c5..879eca6f7 100644 --- a/dash-pipeline/SAI/specs/dash_acl.yaml +++ b/dash-pipeline/SAI/specs/dash_acl.yaml @@ -27,11 +27,11 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 50200087 + id: 37949057 actions: default: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: default - id: 25655048 + id: 21989040 attr_param_id: {} - !!python/object:utils.sai_spec.sai_api.SaiApi name: dash_acl_rule @@ -194,116 +194,116 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 41950136 + id: 43936368 actions: SAI_DASH_ACL_RULE_ACTION_PERMIT: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_PERMIT - id: 32161567 + id: 24892843 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE - id: 20706700 + id: 26577723 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_DENY: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_DENY - id: 28146588 + id: 31332881 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE - id: 31424218 + id: 24146215 attr_param_id: {} - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 43016664 + id: 48549629 actions: SAI_DASH_ACL_RULE_ACTION_PERMIT: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_PERMIT - id: 32161567 + id: 24892843 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE - id: 20706700 + id: 26577723 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_DENY: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_DENY - id: 28146588 + id: 31332881 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE - id: 31424218 + id: 24146215 attr_param_id: {} - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 49695908 + id: 40869404 actions: SAI_DASH_ACL_RULE_ACTION_PERMIT: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_PERMIT - id: 32161567 + id: 24892843 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE - id: 20706700 + id: 26577723 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_DENY: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_DENY - id: 28146588 + id: 31332881 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE - id: 31424218 + id: 24146215 attr_param_id: {} - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 49209582 + id: 49672642 actions: SAI_DASH_ACL_RULE_ACTION_PERMIT: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_PERMIT - id: 18858683 + id: 22622424 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE - id: 24263137 + id: 27458076 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_DENY: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_DENY - id: 29962337 + id: 27228779 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE - id: 26077229 + id: 29275145 attr_param_id: {} - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 36478314 + id: 37932124 actions: SAI_DASH_ACL_RULE_ACTION_PERMIT: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_PERMIT - id: 18858683 + id: 22622424 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE - id: 24263137 + id: 27458076 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_DENY: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_DENY - id: 29962337 + id: 27228779 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE - id: 26077229 + id: 29275145 attr_param_id: {} - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 39012793 + id: 46113118 actions: SAI_DASH_ACL_RULE_ACTION_PERMIT: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_PERMIT - id: 18858683 + id: 22622424 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_PERMIT_AND_CONTINUE - id: 24263137 + id: 27458076 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_DENY: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_DENY - id: 29962337 + id: 27228779 attr_param_id: {} SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DASH_ACL_RULE_ACTION_DENY_AND_CONTINUE - id: 26077229 + id: 29275145 attr_param_id: {} diff --git a/dash-pipeline/SAI/specs/dash_direction_lookup.yaml b/dash-pipeline/SAI/specs/dash_direction_lookup.yaml index d92d63487..14cd33034 100644 --- a/dash-pipeline/SAI/specs/dash_direction_lookup.yaml +++ b/dash-pipeline/SAI/specs/dash_direction_lookup.yaml @@ -64,10 +64,10 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 44703784 + id: 49875338 actions: SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION - id: 17408972 + id: 32588257 attr_param_id: SAI_DIRECTION_LOOKUP_ENTRY_ATTR_DASH_ENI_MAC_OVERRIDE_TYPE: 1 diff --git a/dash-pipeline/SAI/specs/dash_eni.yaml b/dash-pipeline/SAI/specs/dash_eni.yaml index 2cf2b98d2..d027258d7 100644 --- a/dash-pipeline/SAI/specs/dash_eni.yaml +++ b/dash-pipeline/SAI/specs/dash_eni.yaml @@ -64,11 +64,11 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 36648123 + id: 39883185 actions: SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ACTION_SET_ENI: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ACTION_SET_ENI - id: 24618133 + id: 19019152 attr_param_id: SAI_ENI_ETHER_ADDRESS_MAP_ENTRY_ATTR_ENI_ID: 1 - !!python/object:utils.sai_spec.sai_api.SaiApi @@ -598,6 +598,19 @@ sai_apis: valid_only: null is_vlan: false deprecated: false + - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute + name: SAI_ENI_ATTR_FLOW_ENABLED + description: Action parameter flow enabled + type: bool + attr_value_field: booldata + default: 'false' + isresourcetype: false + flags: CREATE_AND_SET + object_name: null + allow_null: false + valid_only: null + is_vlan: false + deprecated: false stats: - !!python/object:utils.sai_spec.sai_attribute.SaiAttribute name: SAI_ENI_STAT_RX_BYTES @@ -1616,9 +1629,9 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 45859274 + id: 38483381 actions: default: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: default - id: 27167550 + id: 30359009 attr_param_id: {} diff --git a/dash-pipeline/SAI/specs/dash_inbound_routing.yaml b/dash-pipeline/SAI/specs/dash_inbound_routing.yaml index 9a3a6e783..ae5b95803 100644 --- a/dash-pipeline/SAI/specs/dash_inbound_routing.yaml +++ b/dash-pipeline/SAI/specs/dash_inbound_routing.yaml @@ -141,26 +141,26 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 38920290 + id: 46226512 actions: SAI_INBOUND_ROUTING_ENTRY_ACTION_TUNNEL_DECAP: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_INBOUND_ROUTING_ENTRY_ACTION_TUNNEL_DECAP - id: 22253429 + id: 19753110 attr_param_id: SAI_INBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_OR: 1 SAI_INBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_AND: 2 SAI_INBOUND_ROUTING_ENTRY_ACTION_TUNNEL_DECAP_PA_VALIDATE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_INBOUND_ROUTING_ENTRY_ACTION_TUNNEL_DECAP_PA_VALIDATE - id: 27987616 + id: 25922590 attr_param_id: SAI_INBOUND_ROUTING_ENTRY_ATTR_SRC_VNET_ID: 1 SAI_INBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_OR: 2 SAI_INBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_AND: 3 SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP - id: 32581635 + id: 29008246 attr_param_id: {} SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP_PA_VALIDATE: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_INBOUND_ROUTING_ENTRY_ACTION_VXLAN_DECAP_PA_VALIDATE - id: 22711915 + id: 21551298 attr_param_id: {} diff --git a/dash-pipeline/SAI/specs/dash_outbound_ca_to_pa.yaml b/dash-pipeline/SAI/specs/dash_outbound_ca_to_pa.yaml index 685d7142e..7c594d82e 100644 --- a/dash-pipeline/SAI/specs/dash_outbound_ca_to_pa.yaml +++ b/dash-pipeline/SAI/specs/dash_outbound_ca_to_pa.yaml @@ -261,7 +261,7 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 43335456 + id: 48765007 actions: SAI_OUTBOUND_CA_TO_PA_ENTRY_ACTION_SET_TUNNEL_MAPPING: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_OUTBOUND_CA_TO_PA_ENTRY_ACTION_SET_TUNNEL_MAPPING diff --git a/dash-pipeline/SAI/specs/dash_outbound_routing.yaml b/dash-pipeline/SAI/specs/dash_outbound_routing.yaml index 8b8f499a1..05effc7b2 100644 --- a/dash-pipeline/SAI/specs/dash_outbound_routing.yaml +++ b/dash-pipeline/SAI/specs/dash_outbound_routing.yaml @@ -294,7 +294,7 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 44010720 + id: 38546097 actions: SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET @@ -367,9 +367,9 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 34522254 + id: 40572680 actions: default: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: default - id: 20489967 + id: 30077100 attr_param_id: {} diff --git a/dash-pipeline/SAI/specs/dash_pa_validation.yaml b/dash-pipeline/SAI/specs/dash_pa_validation.yaml index c52119654..ffe4beccb 100644 --- a/dash-pipeline/SAI/specs/dash_pa_validation.yaml +++ b/dash-pipeline/SAI/specs/dash_pa_validation.yaml @@ -70,9 +70,9 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 35526612 + id: 43665660 actions: SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_PA_VALIDATION_ENTRY_ACTION_PERMIT - id: 32591400 + id: 19504487 attr_param_id: {} diff --git a/dash-pipeline/SAI/specs/dash_tunnel.yaml b/dash-pipeline/SAI/specs/dash_tunnel.yaml index b73273e6b..30a8fdd08 100644 --- a/dash-pipeline/SAI/specs/dash_tunnel.yaml +++ b/dash-pipeline/SAI/specs/dash_tunnel.yaml @@ -53,9 +53,9 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 44400659 + id: 34128771 actions: default: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: default - id: 27891720 + id: 18727423 attr_param_id: {} diff --git a/dash-pipeline/SAI/specs/dash_vip.yaml b/dash-pipeline/SAI/specs/dash_vip.yaml index 590ea7191..6a1e3daf0 100644 --- a/dash-pipeline/SAI/specs/dash_vip.yaml +++ b/dash-pipeline/SAI/specs/dash_vip.yaml @@ -64,9 +64,9 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 45245089 + id: 48212080 actions: SAI_VIP_ENTRY_ACTION_ACCEPT: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: SAI_VIP_ENTRY_ACTION_ACCEPT - id: 26041632 + id: 22859453 attr_param_id: {} diff --git a/dash-pipeline/SAI/specs/dash_vnet.yaml b/dash-pipeline/SAI/specs/dash_vnet.yaml index 594d0bddb..8240bcab4 100644 --- a/dash-pipeline/SAI/specs/dash_vnet.yaml +++ b/dash-pipeline/SAI/specs/dash_vnet.yaml @@ -27,9 +27,9 @@ sai_apis: p4_meta: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4Meta tables: - !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaTable - id: 49590243 + id: 39583935 actions: default: !!python/object:utils.sai_spec.sai_api_p4_meta.SaiApiP4MetaAction name: default - id: 20510911 + id: 28116018 attr_param_id: {} diff --git a/dash-pipeline/bmv2/dash_headers.p4 b/dash-pipeline/bmv2/dash_headers.p4 index b2238e57e..a87c62fbb 100644 --- a/dash-pipeline/bmv2/dash_headers.p4 +++ b/dash-pipeline/bmv2/dash_headers.p4 @@ -153,7 +153,6 @@ header ipv6_t { const bit<16> IPV6_HDR_SIZE=320/8; -#ifdef DPAPP_CONNTRACK enum bit<16> dash_flow_enabled_key_t { ENI_ADDR = (1 << 0), VNI = (1 << 1), @@ -235,10 +234,7 @@ const bit<16> PACKET_META_HDR_SIZE=(8+4+4+16)/8; #define DASH_ETHTYPE 0x876d #define DPAPP_MAC 0x02fe23f0e413 -#endif // DPAPP_CONNTRACK - struct headers_t { -#ifdef DPAPP_CONNTRACK /* packet metadata headers */ ethernet_t dp_ethernet; dash_packet_meta_t packet_meta; @@ -247,7 +243,6 @@ struct headers_t { overlay_rewrite_data_t flow_overlay_data; encap_data_t flow_encap_data; encap_data_t flow_tunnel_data; -#endif // DPAPP_CONNTRACK /* Underlay 1 headers */ ethernet_t u1_ethernet; diff --git a/dash-pipeline/bmv2/dash_metadata.p4 b/dash-pipeline/bmv2/dash_metadata.p4 index a92bf2b78..c30999eb2 100644 --- a/dash-pipeline/bmv2/dash_metadata.p4 +++ b/dash-pipeline/bmv2/dash_metadata.p4 @@ -182,13 +182,12 @@ struct metadata_t { // Flow data conntrack_data_t conntrack_data; -#ifdef DPAPP_CONNTRACK flow_table_data_t flow_table; dash_flow_state_t flow_state; bit<16> bulk_get_session_id; bit<16> bulk_get_session_filter_id; + bool flow_enabled; bool to_dpapp; -#endif // DPAPP_CONNTRACK // Stage transition control dash_pipeline_stage_t target_stage; diff --git a/dash-pipeline/bmv2/dash_parser.p4 b/dash-pipeline/bmv2/dash_parser.p4 index b3797f51d..d2bd275f4 100644 --- a/dash-pipeline/bmv2/dash_parser.p4 +++ b/dash-pipeline/bmv2/dash_parser.p4 @@ -29,27 +29,22 @@ parser dash_parser( ) { state start { -#ifdef DPAPP_CONNTRACK // By default, packet is REGULAR from EXTERNAL hd.packet_meta.setValid(); hd.packet_meta.packet_source = dash_packet_source_t.EXTERNAL; hd.packet_meta.packet_type = dash_packet_type_t.REGULAR; hd.packet_meta.packet_subtype = dash_packet_subtype_t.NONE; hd.packet_meta.length = PACKET_META_HDR_SIZE; -#endif // DPAPP_CONNTRACK packet.extract(hd.u0_ethernet); transition select(hd.u0_ethernet.ether_type) { IPV4_ETHTYPE: parse_u0_ipv4; IPV6_ETHTYPE: parse_u0_ipv6; -#ifdef DPAPP_CONNTRACK DASH_ETHTYPE: parse_dash; -#endif // DPAPP_CONNTRACK default: accept; } } -#ifdef DPAPP_CONNTRACK state parse_dash { packet.extract(hd.packet_meta); if (hd.packet_meta.packet_subtype != dash_packet_subtype_t.NONE) { @@ -76,7 +71,6 @@ parser dash_parser( transition parse_customer_ethernet; } -#endif // DPAPP_CONNTRACK state parse_u0_ipv4 { packet.extract(hd.u0_ipv4); @@ -179,7 +173,6 @@ control dash_deparser( ) { apply { -#ifdef DPAPP_CONNTRACK packet.emit(hdr.dp_ethernet); packet.emit(hdr.packet_meta); packet.emit(hdr.flow_key); @@ -187,7 +180,6 @@ control dash_deparser( packet.emit(hdr.flow_overlay_data); packet.emit(hdr.flow_encap_data); packet.emit(hdr.flow_tunnel_data); -#endif // DPAPP_CONNTRACK packet.emit(hdr.u0_ethernet); packet.emit(hdr.u0_ipv4); diff --git a/dash-pipeline/bmv2/dash_pipeline.p4 b/dash-pipeline/bmv2/dash_pipeline.p4 index a4b3a536a..09a8e1cf7 100644 --- a/dash-pipeline/bmv2/dash_pipeline.p4 +++ b/dash-pipeline/bmv2/dash_pipeline.p4 @@ -8,11 +8,8 @@ #include "dash_tunnel.p4" #include "dash_outbound.p4" #include "dash_inbound.p4" -#ifdef DPAPP_CONNTRACK -#include "stages/conntrack_lookup.p4" -#else #include "dash_conntrack.p4" -#endif +#include "stages/conntrack_lookup.p4" #include "stages/direction_lookup.p4" #include "stages/eni_lookup.p4" #include "stages/ha.p4" @@ -20,65 +17,94 @@ #include "stages/metering_update.p4" #include "underlay.p4" -control dash_ingress( +control dash_inbound_routing_stage( inout headers_t hdr , inout metadata_t meta -#ifdef TARGET_BMV2_V1MODEL - , inout standard_metadata_t standard_metadata -#endif // TARGET_BMV2_V1MODEL -#ifdef TARGET_DPDK_PNA - , in pna_main_input_metadata_t istd - , inout pna_main_output_metadata_t ostd -#endif // TARGET_DPDK_PNA ) { - action drop_action() { -#ifdef TARGET_BMV2_V1MODEL - mark_to_drop(standard_metadata); -#endif // TARGET_BMV2_V1MODEL -#ifdef TARGET_DPDK_PNA - drop_packet(); -#endif // TARGET_DPDK_PNA - } - action deny() { meta.dropped = true; } - action accept() { + action permit() { } - @SaiTable[name = "vip", api = "dash_vip"] - table vip { + action vxlan_decap() {} + action vxlan_decap_pa_validate() {} + + action tunnel_decap(inout headers_t hdr, + inout metadata_t meta, + bit<32> meter_class_or, + @SaiVal[default_value="4294967295"] bit<32> meter_class_and) { + set_meter_attrs(meta, meter_class_or, meter_class_and); + } + + action tunnel_decap_pa_validate(inout headers_t hdr, + inout metadata_t meta, + @SaiVal[type="sai_object_id_t"] bit<16> src_vnet_id, + bit<32> meter_class_or, + @SaiVal[default_value="4294967295"] bit<32> meter_class_and) { + meta.vnet_id = src_vnet_id; + set_meter_attrs(meta, meter_class_or, meter_class_and); + } + + @SaiTable[name = "pa_validation", api = "dash_pa_validation"] + table pa_validation { key = { - hdr.u0_ipv4.dst_addr : exact @SaiVal[name = "VIP", type="sai_ip_address_t"]; + meta.vnet_id: exact @SaiVal[type="sai_object_id_t"]; + hdr.u0_ipv4.src_addr : exact @SaiVal[name = "sip", type="sai_ip_address_t"]; } actions = { - accept; + permit; @defaultonly deny; } const default_action = deny; } - action set_appliance(EthernetAddress neighbor_mac, - EthernetAddress mac) { - meta.encap_data.underlay_dmac = neighbor_mac; - meta.encap_data.underlay_smac = mac; + @SaiTable[name = "inbound_routing", api = "dash_inbound_routing"] + table inbound_routing { + key = { + meta.eni_id: exact @SaiVal[type="sai_object_id_t"]; + hdr.u0_vxlan.vni : exact @SaiVal[name = "VNI"]; + hdr.u0_ipv4.src_addr : ternary @SaiVal[name = "sip", type="sai_ip_address_t"]; + } + actions = { + tunnel_decap(hdr, meta); + tunnel_decap_pa_validate(hdr, meta); + vxlan_decap; // Deprecated, but cannot be removed until SWSS is updated. + vxlan_decap_pa_validate; // Deprecated, but cannot be removed until SWSS is updated. + @defaultonly deny; + } + + const default_action = deny; } - /* This table API should be implemented manually using underlay SAI */ - @SaiTable[ignored = "true"] - table appliance { - key = { - meta.appliance_id : ternary; + apply { + if (meta.direction != dash_direction_t.INBOUND) { + return; } - actions = { - set_appliance; + switch (inbound_routing.apply().action_run) { + tunnel_decap_pa_validate: { + pa_validation.apply(); + } + deny: { + UPDATE_ENI_COUNTER(inbound_routing_entry_miss_drop); + } } } +} + +control dash_eni_stage( + inout headers_t hdr + , inout metadata_t meta + ) +{ + action deny() { + meta.dropped = true; + } #define ACL_GROUPS_PARAM(prefix) \ @SaiVal[type="sai_object_id_t"] bit<16> ## prefix ##_stage1_dash_acl_group_id, \ @@ -113,6 +139,7 @@ control dash_ingress( ACL_GROUPS_PARAM(inbound_v6), ACL_GROUPS_PARAM(outbound_v4), ACL_GROUPS_PARAM(outbound_v6), + bit<1> flow_enabled, bit<1> disable_fast_path_icmp_flow_redirection, bit<1> full_flow_resimulation_requested, bit<64> max_resimulated_flow_per_second, @@ -159,6 +186,7 @@ control dash_ingress( } meta.ha.ha_scope_id = ha_scope_id; + meta.flow_enabled = (bool)flow_enabled; meta.fast_path_icmp_flow_redirection_disabled = disable_fast_path_icmp_flow_redirection; } @@ -175,107 +203,59 @@ control dash_ingress( const default_action = deny; } - action permit() { + apply { + if (!eni.apply().hit) { + UPDATE_COUNTER(eni_miss_drop, 0); + } } +} - action vxlan_decap() {} - action vxlan_decap_pa_validate() {} - - action tunnel_decap(inout headers_t hdr, - inout metadata_t meta, - bit<32> meter_class_or, - @SaiVal[default_value="4294967295"] bit<32> meter_class_and) { - set_meter_attrs(meta, meter_class_or, meter_class_and); +// direction lookup, eni lookup, etc +control dash_lookup_stage( + inout headers_t hdr + , inout metadata_t meta + ) +{ + action deny() { + meta.dropped = true; } - action tunnel_decap_pa_validate(inout headers_t hdr, - inout metadata_t meta, - @SaiVal[type="sai_object_id_t"] bit<16> src_vnet_id, - bit<32> meter_class_or, - @SaiVal[default_value="4294967295"] bit<32> meter_class_and) { - meta.vnet_id = src_vnet_id; - set_meter_attrs(meta, meter_class_or, meter_class_and); + action accept() { } - @SaiTable[name = "pa_validation", api = "dash_pa_validation"] - table pa_validation { + @SaiTable[name = "vip", api = "dash_vip"] + table vip { key = { - meta.vnet_id: exact @SaiVal[type="sai_object_id_t"]; - hdr.u0_ipv4.src_addr : exact @SaiVal[name = "sip", type="sai_ip_address_t"]; - } - - actions = { - permit; - @defaultonly deny; + hdr.u0_ipv4.dst_addr : exact @SaiVal[name = "VIP", type="sai_ip_address_t"]; } - const default_action = deny; - } - - @SaiTable[name = "inbound_routing", api = "dash_inbound_routing"] - table inbound_routing { - key = { - meta.eni_id: exact @SaiVal[type="sai_object_id_t"]; - hdr.u0_vxlan.vni : exact @SaiVal[name = "VNI"]; - hdr.u0_ipv4.src_addr : ternary @SaiVal[name = "sip", type="sai_ip_address_t"]; - } actions = { - tunnel_decap(hdr, meta); - tunnel_decap_pa_validate(hdr, meta); - vxlan_decap; // Deprecated, but cannot be removed until SWSS is updated. - vxlan_decap_pa_validate; // Deprecated, but cannot be removed until SWSS is updated. + accept; @defaultonly deny; } const default_action = deny; } - action set_acl_group_attrs(@SaiVal[type="sai_ip_addr_family_t", isresourcetype="true"] bit<32> ip_addr_family) { - if (ip_addr_family == 0) /* SAI_IP_ADDR_FAMILY_IPV4 */ { - if (meta.is_overlay_ip_v6 == 1) { - meta.dropped = true; - } - } else { - if (meta.is_overlay_ip_v6 == 0) { - meta.dropped = true; - } - } + action set_appliance(EthernetAddress neighbor_mac, + EthernetAddress mac) { + meta.encap_data.underlay_dmac = neighbor_mac; + meta.encap_data.underlay_smac = mac; } - @SaiTable[name = "dash_acl_group", api = "dash_acl", isobject="true"] - table acl_group { + /* This table API should be implemented manually using underlay SAI */ + @SaiTable[ignored = "true"] + table appliance { key = { - meta.stage1_dash_acl_group_id : exact @SaiVal[name = "dash_acl_group_id"]; + meta.appliance_id : ternary; } + actions = { - set_acl_group_attrs(); + set_appliance; } } apply { - meta.encap_data.setValid(); - meta.tunnel_data.setValid(); - meta.overlay_data.setValid(); - -#ifdef TARGET_DPDK_PNA -#ifdef DPDK_PNA_SEND_TO_PORT_FIX_MERGED - // As of 2023-Jan-26, the version of the pna.p4 header file - // included with p4c defines send_to_port with a parameter - // that has no 'in' direction. The following commit in the - // public pna repo fixes this, but this fix has not yet been - // copied into the p4c repo. - // https://github.com/p4lang/pna/commit/b9fdfb888e5385472c34ff773914c72b78b63058 - // Until p4c is updated with this fix, the following line will - // give a compile-time error. - send_to_port(istd.input_port); -#endif // DPDK_PNA_SEND_TO_PORT_FIX_MERGED -#endif // TARGET_DPDK_PNA - -#ifdef DPAPP_CONNTRACK - // If packet is from DPAPP, just do conntrack_lookup - if (hdr.packet_meta.packet_source != dash_packet_source_t.DPAPP) { -#endif // DPAPP_CONNTRACK - if (meta.is_fast_path_icmp_flow_redirection_packet) { UPDATE_COUNTER(port_lb_fast_path_icmp_in, 0); } @@ -302,16 +282,7 @@ control dash_ingress( meta.eni_data.dscp_mode = dash_tunnel_dscp_mode_t.PRESERVE_MODEL; meta.eni_data.dscp = (bit<6>)hdr.u0_ipv4.diffserv; - if (meta.direction == dash_direction_t.INBOUND) { - switch (inbound_routing.apply().action_run) { - tunnel_decap_pa_validate: { - pa_validation.apply(); - } - deny: { - UPDATE_ENI_COUNTER(inbound_routing_entry_miss_drop); - } - } - } + dash_inbound_routing_stage.apply(hdr, meta); do_tunnel_decap(hdr, meta); @@ -340,10 +311,7 @@ control dash_ingress( meta.dst_l4_port = hdr.customer_udp.dst_port; } - if (!eni.apply().hit) { - UPDATE_COUNTER(eni_miss_drop, 0); - deny(); - } + dash_eni_stage.apply(hdr, meta); if (meta.eni_data.admin_state == 0) { deny(); @@ -353,20 +321,37 @@ control dash_ingress( if (meta.is_fast_path_icmp_flow_redirection_packet) { UPDATE_ENI_COUNTER(eni_lb_fast_path_icmp_in); } + } +} +control dash_match_stage( + inout headers_t hdr + , inout metadata_t meta + ) +{ + action set_acl_group_attrs(@SaiVal[type="sai_ip_addr_family_t", isresourcetype="true"] bit<32> ip_addr_family) { + if (ip_addr_family == 0) /* SAI_IP_ADDR_FAMILY_IPV4 */ { + if (meta.is_overlay_ip_v6 == 1) { + meta.dropped = true; + } + } else { + if (meta.is_overlay_ip_v6 == 0) { + meta.dropped = true; + } + } + } -#ifdef DPAPP_CONNTRACK - } // from dpapp - conntrack_lookup_stage.apply(hdr, meta); -#endif // DPAPP_CONNTRACK - - ha_stage.apply(hdr, meta); - -#ifdef DPAPP_CONNTRACK - if (meta.flow_state == dash_flow_state_t.FLOW_MISS && - hdr.packet_meta.packet_source == dash_packet_source_t.EXTERNAL) { -#endif // DPAPP_CONNTRACK + @SaiTable[name = "dash_acl_group", api = "dash_acl", isobject="true"] + table acl_group { + key = { + meta.stage1_dash_acl_group_id : exact @SaiVal[name = "dash_acl_group_id"]; + } + actions = { + set_acl_group_attrs(); + } + } + apply { acl_group.apply(); if (meta.direction == dash_direction_t.OUTBOUND) { @@ -380,21 +365,88 @@ control dash_ingress( } tunnel_stage.apply(hdr, meta); + } +} - if (meta.dropped) { - drop_action(); - return; +control dash_ingress( + inout headers_t hdr + , inout metadata_t meta +#ifdef TARGET_BMV2_V1MODEL + , inout standard_metadata_t standard_metadata +#endif // TARGET_BMV2_V1MODEL +#ifdef TARGET_DPDK_PNA + , in pna_main_input_metadata_t istd + , inout pna_main_output_metadata_t ostd +#endif // TARGET_DPDK_PNA + ) +{ + action drop_action() { +#ifdef TARGET_BMV2_V1MODEL + mark_to_drop(standard_metadata); +#endif // TARGET_BMV2_V1MODEL +#ifdef TARGET_DPDK_PNA + drop_packet(); +#endif // TARGET_DPDK_PNA + } + + apply { + meta.encap_data.setValid(); + meta.tunnel_data.setValid(); + meta.overlay_data.setValid(); + +#ifdef TARGET_DPDK_PNA +#ifdef DPDK_PNA_SEND_TO_PORT_FIX_MERGED + // As of 2023-Jan-26, the version of the pna.p4 header file + // included with p4c defines send_to_port with a parameter + // that has no 'in' direction. The following commit in the + // public pna repo fixes this, but this fix has not yet been + // copied into the p4c repo. + // https://github.com/p4lang/pna/commit/b9fdfb888e5385472c34ff773914c72b78b63058 + // Until p4c is updated with this fix, the following line will + // give a compile-time error. + send_to_port(istd.input_port); +#endif // DPDK_PNA_SEND_TO_PORT_FIX_MERGED +#endif // TARGET_DPDK_PNA + + // If packet is from DPAPP, just do conntrack_lookup + if (hdr.packet_meta.packet_source != dash_packet_source_t.DPAPP) { + dash_lookup_stage.apply(hdr, meta); + } + else { + meta.flow_enabled = true; } -#ifdef DPAPP_CONNTRACK + if (meta.flow_enabled) { + conntrack_lookup_stage.apply(hdr, meta); } - conntrack_flow_handle.apply(hdr, meta); - if (meta.to_dpapp) { - standard_metadata.egress_spec = 2; // vpp port - return; + ha_stage.apply(hdr, meta); + + if (!meta.flow_enabled || + (meta.flow_state == dash_flow_state_t.FLOW_MISS && + hdr.packet_meta.packet_source == dash_packet_source_t.EXTERNAL)) + { + dash_match_stage.apply(hdr, meta); + if (meta.dropped) { + drop_action(); + return; + } + } + + if (meta.flow_enabled) { + conntrack_flow_handle.apply(hdr, meta); + if (meta.to_dpapp) { +#ifdef TARGET_BMV2_V1MODEL + standard_metadata.egress_spec = 2; //FIXME hard-code vpp port +#else //FIXME DPDK_PNA + drop_action(); +#endif // TARGET_BMV2_V1MODEL + return; + } + } + else { + hdr.packet_meta.setInvalid(); } -#endif // DPAPP_CONNTRACK routing_action_apply.apply(hdr, meta); diff --git a/dash-pipeline/bmv2/stages/conntrack_lookup.p4 b/dash-pipeline/bmv2/stages/conntrack_lookup.p4 index cb8714643..4510363f1 100644 --- a/dash-pipeline/bmv2/stages/conntrack_lookup.p4 +++ b/dash-pipeline/bmv2/stages/conntrack_lookup.p4 @@ -1,7 +1,6 @@ #ifndef _DASH_STAGE_CONNTRACK_LOOKUP_P4 #define _DASH_STAGE_CONNTRACK_LOOKUP_P4 -#ifdef DPAPP_CONNTRACK #include "../dash_metadata.p4" action conntrack_set_meta_from_dash_header(in headers_t hdr, out metadata_t meta) @@ -375,5 +374,4 @@ control conntrack_lookup_stage(inout headers_t hdr, inout metadata_t meta) { flow_entry_bulk_get_session.apply(); } } -#endif // DPAPP_CONNTRACK #endif /* _DASH_STAGE_CONNTRACK_LOOKUP_P4 */ diff --git a/dash-pipeline/bmv2/underlay.p4 b/dash-pipeline/bmv2/underlay.p4 index ba8811d7a..ec242d214 100644 --- a/dash-pipeline/bmv2/underlay.p4 +++ b/dash-pipeline/bmv2/underlay.p4 @@ -50,13 +50,12 @@ control underlay( action def_act() { #ifdef TARGET_BMV2_V1MODEL -#ifdef DPAPP_CONNTRACK if (hdr.packet_meta.packet_source == dash_packet_source_t.DPAPP) { - standard_metadata.egress_spec = 0; + standard_metadata.egress_spec = 0; /* FIXME */ + } + else { + standard_metadata.egress_spec = standard_metadata.ingress_port; } - else -#endif // DPAPP_CONNTRACK - standard_metadata.egress_spec = standard_metadata.ingress_port; #endif // TARGET_BMV2_V1MODEL #ifdef TARGET_DPDK_PNA