diff --git a/examples/ipsec-acc.p4 b/examples/ipsec-acc.p4 index fc2dd1a..1c4cd95 100644 --- a/examples/ipsec-acc.p4 +++ b/examples/ipsec-acc.p4 @@ -125,7 +125,8 @@ parser MainParserImpl( packet_in pkt, out headers_t hdr, inout main_metadata_t main_meta, - in pna_main_parser_input_metadata_t istd) + in pna_main_parser_input_metadata_t istd, + inout vendor_metadata_t vmeta) { bit<1> is_recirc = 0; bit<2> ipsec_op = 0; @@ -436,7 +437,8 @@ control MainControlImpl( inout headers_t hdr, inout main_metadata_t main_meta, in pna_main_input_metadata_t istd, - inout pna_main_output_metadata_t ostd) + inout pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta) { apply { if (main_meta.ipsec_decrypt_done == 1) { @@ -451,7 +453,8 @@ control MainDeparserImpl( packet_out pkt, in headers_t hdr, // from main control in main_metadata_t user_meta, // from main control - in pna_main_output_metadata_t ostd) + in pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta) { apply { pkt.emit(hdr.recirc_header); diff --git a/examples/pna-demo-L2-one-table.p4 b/examples/pna-demo-L2-one-table.p4 index 45617aa..74e79bc 100644 --- a/examples/pna-demo-L2-one-table.p4 +++ b/examples/pna-demo-L2-one-table.p4 @@ -47,7 +47,8 @@ parser MainParserImpl( packet_in pkt, out headers_t hdr, inout metadata_t meta, - in pna_main_parser_input_metadata_t istd) + in pna_main_parser_input_metadata_t istd, + inout vendor_metadata_t vmeta) { state start { pkt.extract(hdr.eth); @@ -59,7 +60,8 @@ control MainControlImpl( inout headers_t hdr, inout metadata_t meta, in pna_main_input_metadata_t istd, - inout pna_main_output_metadata_t ostd) + inout pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta) { action drop () { drop_packet(); @@ -99,7 +101,8 @@ control MainDeparserImpl( packet_out pkt, in headers_t hdr, in metadata_t meta, - in pna_main_output_metadata_t ostd) + in pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta) { apply { pkt.emit(hdr.eth); diff --git a/examples/pna-demo-L2-two-tables.p4 b/examples/pna-demo-L2-two-tables.p4 index bafe8fa..945768e 100644 --- a/examples/pna-demo-L2-two-tables.p4 +++ b/examples/pna-demo-L2-two-tables.p4 @@ -47,7 +47,8 @@ parser MainParserImpl( packet_in pkt, out headers_t hdr, inout metadata_t meta, - in pna_main_parser_input_metadata_t istd) + in pna_main_parser_input_metadata_t istd, + inout vendor_metadata_t vmeta) { state start { pkt.extract(hdr.eth); @@ -59,7 +60,8 @@ control MainControlImpl( inout headers_t hdr, inout metadata_t meta, in pna_main_input_metadata_t istd, - inout pna_main_output_metadata_t ostd) + inout pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta) { action drop () { drop_packet(); @@ -106,7 +108,8 @@ control MainDeparserImpl( packet_out pkt, in headers_t hdr, in metadata_t meta, - in pna_main_output_metadata_t ostd) + in pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta) { apply { pkt.emit(hdr.eth); diff --git a/examples/pna-demo-last-forwarding-action-wins.p4 b/examples/pna-demo-last-forwarding-action-wins.p4 index f480d33..acc87db 100644 --- a/examples/pna-demo-last-forwarding-action-wins.p4 +++ b/examples/pna-demo-last-forwarding-action-wins.p4 @@ -52,7 +52,8 @@ parser MainParserImpl( packet_in pkt, out headers_t hdr, inout metadata_t meta, - in pna_main_parser_input_metadata_t istd) + in pna_main_parser_input_metadata_t istd, + inout vendor_metadata_t vmeta) { state start { pkt.extract(hdr.eth); @@ -64,7 +65,8 @@ control MainControlImpl( inout headers_t hdr, inout metadata_t meta, in pna_main_input_metadata_t istd, - inout pna_main_output_metadata_t ostd) + inout pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta) { action my_drop () { drop_packet(); @@ -139,7 +141,8 @@ control MainDeparserImpl( packet_out pkt, in headers_t hdr, in metadata_t meta, - in pna_main_output_metadata_t ostd) + in pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta) { apply { pkt.emit(hdr.eth); diff --git a/examples/pna-example-tcp-connection-tracking.p4 b/examples/pna-example-tcp-connection-tracking.p4 index 8faf9fb..b83f3b0 100644 --- a/examples/pna-example-tcp-connection-tracking.p4 +++ b/examples/pna-example-tcp-connection-tracking.p4 @@ -95,7 +95,8 @@ parser MainParserImpl( packet_in pkt, out headers_t hdr, inout metadata_t meta, - in pna_main_parser_input_metadata_t istd) + in pna_main_parser_input_metadata_t istd, + inout vendor_metadata_t vmeta) { state start { pkt.extract(hdr.eth); @@ -124,7 +125,8 @@ control MainControlImpl( inout headers_t hdr, inout metadata_t meta, in pna_main_input_metadata_t istd, - inout pna_main_output_metadata_t ostd) + inout pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta) { action drop () { drop_packet(); @@ -339,7 +341,8 @@ control MainDeparserImpl( packet_out pkt, in headers_t hdr, in metadata_t meta, - in pna_main_output_metadata_t ostd) + in pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta) { apply { pkt.emit(hdr.eth); diff --git a/examples/pna-example-template.p4 b/examples/pna-example-template.p4 index b06dbe5..fb9c1e5 100644 --- a/examples/pna-example-template.p4 +++ b/examples/pna-example-template.p4 @@ -79,7 +79,8 @@ parser MainParserImpl( packet_in pkt, out headers_t hdr, inout main_metadata_t main_meta, - in pna_main_parser_input_metadata_t istd) + in pna_main_parser_input_metadata_t istd, + inout vendor_metadata_t vmeta) { state start { pkt.extract(hdr.ethernet); @@ -99,7 +100,8 @@ control MainControlImpl( inout headers_t hdr, // from main parser inout main_metadata_t user_meta, // from main parser, to "next block" in pna_main_input_metadata_t istd, - inout pna_main_output_metadata_t ostd) + inout pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta) { Counter(NUM_PORTS, PNA_CounterType_t.BYTES) port_bytes_in; @@ -139,7 +141,8 @@ control MainDeparserImpl( packet_out pkt, in headers_t hdr, // from main control in main_metadata_t user_meta, // from main control - in pna_main_output_metadata_t ostd) + in pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta) { apply { pkt.emit(hdr.ethernet); diff --git a/pna.p4 b/pna.p4 index c1b7666..6e93f3a 100644 --- a/pna.p4 +++ b/pna.p4 @@ -847,6 +847,17 @@ extern T SelectByDirection( in T from_host_value); +// BEGIN:vendor_metadata_struct +// The contents of this struct are _not_ defined by the PNA +// specification. By design, it is intended to be unique from one +// target device to another. The intent is to be a standard place to +// put intrinsic metadata that vendors wish to make accessible in +// their devices, for which there is not yet general agreement that +// the field should be considered part of the PNA intrinsic metadata. + +struct vendor_metadata_t { +} +// END:vendor_metadata_struct // BEGIN:Programmable_blocks @@ -854,19 +865,22 @@ parser MainParserT( packet_in pkt, out MH main_hdr, inout MM main_user_meta, - in pna_main_parser_input_metadata_t istd); + in pna_main_parser_input_metadata_t istd, + inout vendor_metadata_t vmeta); control MainControlT( inout MH main_hdr, inout MM main_user_meta, in pna_main_input_metadata_t istd, - inout pna_main_output_metadata_t ostd); + inout pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta); control MainDeparserT( packet_out pkt, in MH main_hdr, in MM main_user_meta, - in pna_main_output_metadata_t ostd); + in pna_main_output_metadata_t ostd, + inout vendor_metadata_t vmeta); package PNA_NIC( MainParserT main_parser,