I have a header stack defined this way:
header msg_t {
chunk_t msg;
}
struct hdr_structures_t {
[...]
msg_t[12] Msg;
[...]
}
In my control block, I called the pop_front() method:
control sw_ingress_control (
inout hdr_structures_t hdr, inout metadata_t meta,
in psa_ingress_input_metadata_t std_ingress_input_meta,
inout psa_ingress_output_metadata_t std_ingress_output_meta
)
{
[...]
hdr.Msg.pop_front(1);
[...]
}
However, when I load the compiled P4 config JSON into the PSA BMv2 switch, the logs shows these two line, which I believe to be related:
Invalid reference to object of type 'header stack' with name 'Msg'
psa_switch_grpc: /home/p4/src/behavioral-model/include/bm/bm_sim/data.h:185: unsigned int bm::Data::get_uint() const: Assertion `arith' failed.
With the Invalid reference to object line, I have checked the compiled JSON file for the pipeline config. This is what I found:
- There was no header stack at all:
[...]
"header_stacks" : [],
[...]
- The stack turned out to be converted to single headers:
{
[...]
"name" : "Msg[0]",
"id" : 7,
"header_type" : "msg_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "Msg[1]",
"id" : 8,
"header_type" : "msg_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "Msg[2]",
"id" : 9,
"header_type" : "msg_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "Msg[3]",
"id" : 10,
"header_type" : "msg_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "Msg[4]",
"id" : 11,
"header_type" : "msg_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "Msg[5]",
"id" : 12,
"header_type" : "msg_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "Msg[6]",
"id" : 13,
"header_type" : "msg_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "Msg[7]",
"id" : 14,
"header_type" : "msg_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "Msg[8]",
"id" : 15,
"header_type" : "msg_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "Msg[9]",
"id" : 16,
"header_type" : "msg_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "Msg[10]",
"id" : 17,
"header_type" : "msg_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "Msg[11]",
"id" : 18,
"header_type" : "msg_t",
"metadata" : false,
"pi_omit" : true
},
[...]
Since there is no header stack, it can't be referred to. Is this a compiler bug ?
Thanks.
I have a header stack defined this way:
In my control block, I called the
pop_front()method:However, when I load the compiled P4 config JSON into the PSA BMv2 switch, the logs shows these two line, which I believe to be related:
With the
Invalid reference to objectline, I have checked the compiled JSON file for the pipeline config. This is what I found:{ [...] "name" : "Msg[0]", "id" : 7, "header_type" : "msg_t", "metadata" : false, "pi_omit" : true }, { "name" : "Msg[1]", "id" : 8, "header_type" : "msg_t", "metadata" : false, "pi_omit" : true }, { "name" : "Msg[2]", "id" : 9, "header_type" : "msg_t", "metadata" : false, "pi_omit" : true }, { "name" : "Msg[3]", "id" : 10, "header_type" : "msg_t", "metadata" : false, "pi_omit" : true }, { "name" : "Msg[4]", "id" : 11, "header_type" : "msg_t", "metadata" : false, "pi_omit" : true }, { "name" : "Msg[5]", "id" : 12, "header_type" : "msg_t", "metadata" : false, "pi_omit" : true }, { "name" : "Msg[6]", "id" : 13, "header_type" : "msg_t", "metadata" : false, "pi_omit" : true }, { "name" : "Msg[7]", "id" : 14, "header_type" : "msg_t", "metadata" : false, "pi_omit" : true }, { "name" : "Msg[8]", "id" : 15, "header_type" : "msg_t", "metadata" : false, "pi_omit" : true }, { "name" : "Msg[9]", "id" : 16, "header_type" : "msg_t", "metadata" : false, "pi_omit" : true }, { "name" : "Msg[10]", "id" : 17, "header_type" : "msg_t", "metadata" : false, "pi_omit" : true }, { "name" : "Msg[11]", "id" : 18, "header_type" : "msg_t", "metadata" : false, "pi_omit" : true }, [...]Since there is no header stack, it can't be referred to. Is this a compiler bug ?
Thanks.