Avoid the P4 compiler put ecmp_group_id to scalars meta
Change-Id: I4a5e71d75a4e13de645ea800afcda22988e0e728
diff --git a/tools/test/p4src/p4-16/default.p4 b/tools/test/p4src/p4-16/default.p4
index b977d91..ac4dd46 100644
--- a/tools/test/p4src/p4-16/default.p4
+++ b/tools/test/p4src/p4-16/default.p4
@@ -19,9 +19,13 @@
#include "include/defines.p4"
#include "include/headers.p4"
+struct ecmp_metadata_t {
+ ecmp_group_id_t ecmp_group_id;
+}
+
struct metadata_t {
intrinsic_metadata_t intrinsic_metadata;
- ecmp_group_id_t ecmp_group_id;
+ ecmp_metadata_t ecmp_metadata;
}
#include "include/parsers.p4"
@@ -35,7 +39,7 @@
direct_counter(CounterType.packets) ecmp_counter;
action do_ecmp(ecmp_group_id_t ecmp_group_id) {
- meta.ecmp_group_id = ecmp_group_id;
+ meta.ecmp_metadata.ecmp_group_id = ecmp_group_id;
}
table table0 {
@@ -64,7 +68,7 @@
table ecmp {
support_timeout = false;
key = {
- meta.ecmp_group_id : exact;
+ meta.ecmp_metadata.ecmp_group_id : exact;
// Not for matching.
// Inputs to the hash function of the action selector.
hdr.ipv4.srcAddr : selector;
diff --git a/tools/test/p4src/p4-16/p4c-out/default.json b/tools/test/p4src/p4-16/p4c-out/default.json
index c35cf25..e985a78 100644
--- a/tools/test/p4src/p4-16/p4c-out/default.json
+++ b/tools/test/p4src/p4-16/p4c-out/default.json
@@ -10,8 +10,7 @@
"id" : 0,
"fields" : [
["tmp", 32, false],
- ["tmp_0", 32, false],
- ["metadata_t.ecmp_group_id", 8, false]
+ ["tmp_0", 32, false]
]
},
{
@@ -117,6 +116,13 @@
["mcast_grp", 16, false],
["egress_rid", 16, false]
]
+ },
+ {
+ "name" : "ecmp_metadata_t",
+ "id" : 9,
+ "fields" : [
+ ["ecmp_group_id", 8, false]
+ ]
}
],
"headers" : [
@@ -210,6 +216,13 @@
"header_type" : "intrinsic_metadata_t",
"metadata" : true,
"pi_omit" : true
+ },
+ {
+ "name" : "ecmp_metadata",
+ "id" : 13,
+ "header_type" : "ecmp_metadata_t",
+ "metadata" : true,
+ "pi_omit" : true
}
],
"header_stacks" : [],
@@ -218,12 +231,12 @@
"header_union_stacks" : [],
"field_lists" : [],
"errors" : [
- ["NoError", 1],
- ["PacketTooShort", 2],
- ["NoMatch", 3],
- ["StackOutOfBounds", 4],
- ["HeaderTooShort", 5],
- ["ParserTimeout", 6]
+ ["NoError", 0],
+ ["PacketTooShort", 1],
+ ["NoMatch", 2],
+ ["StackOutOfBounds", 3],
+ ["HeaderTooShort", 4],
+ ["ParserTimeout", 5]
],
"enums" : [],
"parsers" : [
@@ -3173,7 +3186,7 @@
"parameters" : [
{
"type" : "field",
- "value" : ["scalars", "metadata_t.ecmp_group_id"]
+ "value" : ["ecmp_metadata", "ecmp_group_id"]
},
{
"type" : "runtime_data",
@@ -3182,9 +3195,9 @@
],
"source_info" : {
"filename" : "default.p4",
- "line" : 38,
+ "line" : 42,
"column" : 8,
- "source_fragment" : "meta.ecmp_group_id = ecmp_group_id"
+ "source_fragment" : "meta.ecmp_metadata.ecmp_group_id = ecmp_group_id"
}
}
]
@@ -3382,7 +3395,7 @@
"id" : 0,
"source_info" : {
"filename" : "default.p4",
- "line" : 33,
+ "line" : 37,
"column" : 8,
"source_fragment" : "ingress"
},
@@ -3416,7 +3429,7 @@
"id" : 1,
"source_info" : {
"filename" : "default.p4",
- "line" : 41,
+ "line" : 45,
"column" : 10,
"source_fragment" : "table0"
},
@@ -3468,14 +3481,14 @@
"id" : 2,
"source_info" : {
"filename" : "default.p4",
- "line" : 64,
+ "line" : 68,
"column" : 10,
"source_fragment" : "ecmp"
},
"key" : [
{
"match_type" : "exact",
- "target" : ["scalars", "metadata_t.ecmp_group_id"],
+ "target" : ["ecmp_metadata", "ecmp_group_id"],
"mask" : null
}
],
@@ -3589,7 +3602,7 @@
"id" : 1,
"source_info" : {
"filename" : "default.p4",
- "line" : 90,
+ "line" : 94,
"column" : 13,
"source_fragment" : "hdr.packet_out.isValid()"
},
@@ -3643,7 +3656,7 @@
"id" : 1,
"source_info" : {
"filename" : "default.p4",
- "line" : 102,
+ "line" : 106,
"column" : 8,
"source_fragment" : "egress"
},
diff --git a/tools/test/p4src/p4-16/p4c-out/default.p4info b/tools/test/p4src/p4-16/p4c-out/default.p4info
index 957149e..55a9d2e 100644
--- a/tools/test/p4src/p4-16/p4c-out/default.p4info
+++ b/tools/test/p4src/p4-16/p4c-out/default.p4info
@@ -51,7 +51,7 @@
}
match_fields {
id: 1
- name: "meta.ecmp_group_id"
+ name: "meta.ecmp_metadata.ecmp_group_id"
bitwidth: 8
match_type: EXACT
}