From 8ef288e22989b7e771df4de732dc496a8a2a699a Mon Sep 17 00:00:00 2001 From: fruffy Date: Tue, 13 Aug 2024 09:29:24 +0200 Subject: [PATCH] Add example of a program where string comparison are folded. Signed-off-by: fruffy --- testdata/p4_16_samples/string_ops-bmv2.p4 | 59 ++++++++++++++++ .../string_ops-bmv2-first.p4 | 58 ++++++++++++++++ .../string_ops-bmv2-frontend.p4 | 67 +++++++++++++++++++ .../string_ops-bmv2-midend.p4 | 61 +++++++++++++++++ .../p4_16_samples_outputs/string_ops-bmv2.p4 | 58 ++++++++++++++++ .../string_ops-bmv2.p4-stderr | 0 .../string_ops-bmv2.p4.entries.txtpb | 3 + .../string_ops-bmv2.p4.p4info.txtpb | 6 ++ 8 files changed, 312 insertions(+) create mode 100644 testdata/p4_16_samples/string_ops-bmv2.p4 create mode 100644 testdata/p4_16_samples_outputs/string_ops-bmv2-first.p4 create mode 100644 testdata/p4_16_samples_outputs/string_ops-bmv2-frontend.p4 create mode 100644 testdata/p4_16_samples_outputs/string_ops-bmv2-midend.p4 create mode 100644 testdata/p4_16_samples_outputs/string_ops-bmv2.p4 create mode 100644 testdata/p4_16_samples_outputs/string_ops-bmv2.p4-stderr create mode 100644 testdata/p4_16_samples_outputs/string_ops-bmv2.p4.entries.txtpb create mode 100644 testdata/p4_16_samples_outputs/string_ops-bmv2.p4.p4info.txtpb diff --git a/testdata/p4_16_samples/string_ops-bmv2.p4 b/testdata/p4_16_samples/string_ops-bmv2.p4 new file mode 100644 index 00000000000..f0b7642ab83 --- /dev/null +++ b/testdata/p4_16_samples/string_ops-bmv2.p4 @@ -0,0 +1,59 @@ +#include +#define V1MODEL_VERSION 20180101 +#include + +header ethernet_t { + bit<48> dst_addr; + bit<48> src_addr; + bit<16> eth_type; +} + +struct Headers { + ethernet_t eth_hdr; +} + +struct Meta { +} + +void set_hdr(inout bit<48> addr, in bool option) { + if (option) { + addr = 0xAABBCCDDEEFF; + } +} + +parser p(packet_in pkt, out Headers hdr, inout Meta m, inout standard_metadata_t sm) { + state start { + pkt.extract(hdr.eth_hdr); + transition accept; + } +} + +control ingress(inout Headers h, inout Meta m, inout standard_metadata_t sm) { + apply { + set_hdr(h.eth_hdr.dst_addr, "a" != "b"); + set_hdr(h.eth_hdr.src_addr, "a" == "b"); + } +} + +control vrfy(inout Headers h, inout Meta m) { + apply { + } +} + +control update(inout Headers h, inout Meta m) { + apply { + } +} + +control egress(inout Headers h, inout Meta m, inout standard_metadata_t sm) { + apply { + } +} + +control deparser(packet_out pkt, in Headers h) { + apply { + pkt.emit(h); + } +} + +V1Switch(p(), vrfy(), ingress(), egress(), update(), deparser()) main; diff --git a/testdata/p4_16_samples_outputs/string_ops-bmv2-first.p4 b/testdata/p4_16_samples_outputs/string_ops-bmv2-first.p4 new file mode 100644 index 00000000000..ae58edda0b4 --- /dev/null +++ b/testdata/p4_16_samples_outputs/string_ops-bmv2-first.p4 @@ -0,0 +1,58 @@ +#include +#define V1MODEL_VERSION 20180101 +#include + +header ethernet_t { + bit<48> dst_addr; + bit<48> src_addr; + bit<16> eth_type; +} + +struct Headers { + ethernet_t eth_hdr; +} + +struct Meta { +} + +void set_hdr(inout bit<48> addr, in bool option) { + if (option) { + addr = 48w0xaabbccddeeff; + } +} +parser p(packet_in pkt, out Headers hdr, inout Meta m, inout standard_metadata_t sm) { + state start { + pkt.extract(hdr.eth_hdr); + transition accept; + } +} + +control ingress(inout Headers h, inout Meta m, inout standard_metadata_t sm) { + apply { + set_hdr(h.eth_hdr.dst_addr, true); + set_hdr(h.eth_hdr.src_addr, false); + } +} + +control vrfy(inout Headers h, inout Meta m) { + apply { + } +} + +control update(inout Headers h, inout Meta m) { + apply { + } +} + +control egress(inout Headers h, inout Meta m, inout standard_metadata_t sm) { + apply { + } +} + +control deparser(packet_out pkt, in Headers h) { + apply { + pkt.emit(h); + } +} + +V1Switch(p(), vrfy(), ingress(), egress(), update(), deparser()) main; diff --git a/testdata/p4_16_samples_outputs/string_ops-bmv2-frontend.p4 b/testdata/p4_16_samples_outputs/string_ops-bmv2-frontend.p4 new file mode 100644 index 00000000000..dd5904a9753 --- /dev/null +++ b/testdata/p4_16_samples_outputs/string_ops-bmv2-frontend.p4 @@ -0,0 +1,67 @@ +#include +#define V1MODEL_VERSION 20180101 +#include + +header ethernet_t { + bit<48> dst_addr; + bit<48> src_addr; + bit<16> eth_type; +} + +struct Headers { + ethernet_t eth_hdr; +} + +struct Meta { +} + +parser p(packet_in pkt, out Headers hdr, inout Meta m, inout standard_metadata_t sm) { + state start { + pkt.extract(hdr.eth_hdr); + transition accept; + } +} + +control ingress(inout Headers h, inout Meta m, inout standard_metadata_t sm) { + @name("ingress.addr_0") bit<48> addr; + @name("ingress.option_0") bool option; + @name("ingress.addr_1") bit<48> addr_2; + @name("ingress.option_1") bool option_2; + apply { + addr = h.eth_hdr.dst_addr; + option = true; + if (option) { + addr = 48w0xaabbccddeeff; + } + h.eth_hdr.dst_addr = addr; + addr_2 = h.eth_hdr.src_addr; + option_2 = false; + if (option_2) { + addr_2 = 48w0xaabbccddeeff; + } + h.eth_hdr.src_addr = addr_2; + } +} + +control vrfy(inout Headers h, inout Meta m) { + apply { + } +} + +control update(inout Headers h, inout Meta m) { + apply { + } +} + +control egress(inout Headers h, inout Meta m, inout standard_metadata_t sm) { + apply { + } +} + +control deparser(packet_out pkt, in Headers h) { + apply { + pkt.emit(h); + } +} + +V1Switch(p(), vrfy(), ingress(), egress(), update(), deparser()) main; diff --git a/testdata/p4_16_samples_outputs/string_ops-bmv2-midend.p4 b/testdata/p4_16_samples_outputs/string_ops-bmv2-midend.p4 new file mode 100644 index 00000000000..9b70aec5f05 --- /dev/null +++ b/testdata/p4_16_samples_outputs/string_ops-bmv2-midend.p4 @@ -0,0 +1,61 @@ +#include +#define V1MODEL_VERSION 20180101 +#include + +header ethernet_t { + bit<48> dst_addr; + bit<48> src_addr; + bit<16> eth_type; +} + +struct Headers { + ethernet_t eth_hdr; +} + +struct Meta { +} + +parser p(packet_in pkt, out Headers hdr, inout Meta m, inout standard_metadata_t sm) { + state start { + pkt.extract(hdr.eth_hdr); + transition accept; + } +} + +control ingress(inout Headers h, inout Meta m, inout standard_metadata_t sm) { + @hidden action act() { + h.eth_hdr.dst_addr = 48w0xaabbccddeeff; + } + @hidden table tbl_act { + actions = { + act(); + } + const default_action = act(); + } + apply { + tbl_act.apply(); + } +} + +control vrfy(inout Headers h, inout Meta m) { + apply { + } +} + +control update(inout Headers h, inout Meta m) { + apply { + } +} + +control egress(inout Headers h, inout Meta m, inout standard_metadata_t sm) { + apply { + } +} + +control deparser(packet_out pkt, in Headers h) { + apply { + pkt.emit(h.eth_hdr); + } +} + +V1Switch(p(), vrfy(), ingress(), egress(), update(), deparser()) main; diff --git a/testdata/p4_16_samples_outputs/string_ops-bmv2.p4 b/testdata/p4_16_samples_outputs/string_ops-bmv2.p4 new file mode 100644 index 00000000000..036671db034 --- /dev/null +++ b/testdata/p4_16_samples_outputs/string_ops-bmv2.p4 @@ -0,0 +1,58 @@ +#include +#define V1MODEL_VERSION 20180101 +#include + +header ethernet_t { + bit<48> dst_addr; + bit<48> src_addr; + bit<16> eth_type; +} + +struct Headers { + ethernet_t eth_hdr; +} + +struct Meta { +} + +void set_hdr(inout bit<48> addr, in bool option) { + if (option) { + addr = 0xaabbccddeeff; + } +} +parser p(packet_in pkt, out Headers hdr, inout Meta m, inout standard_metadata_t sm) { + state start { + pkt.extract(hdr.eth_hdr); + transition accept; + } +} + +control ingress(inout Headers h, inout Meta m, inout standard_metadata_t sm) { + apply { + set_hdr(h.eth_hdr.dst_addr, "a" != "b"); + set_hdr(h.eth_hdr.src_addr, "a" == "b"); + } +} + +control vrfy(inout Headers h, inout Meta m) { + apply { + } +} + +control update(inout Headers h, inout Meta m) { + apply { + } +} + +control egress(inout Headers h, inout Meta m, inout standard_metadata_t sm) { + apply { + } +} + +control deparser(packet_out pkt, in Headers h) { + apply { + pkt.emit(h); + } +} + +V1Switch(p(), vrfy(), ingress(), egress(), update(), deparser()) main; diff --git a/testdata/p4_16_samples_outputs/string_ops-bmv2.p4-stderr b/testdata/p4_16_samples_outputs/string_ops-bmv2.p4-stderr new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testdata/p4_16_samples_outputs/string_ops-bmv2.p4.entries.txtpb b/testdata/p4_16_samples_outputs/string_ops-bmv2.p4.entries.txtpb new file mode 100644 index 00000000000..5cb9652623a --- /dev/null +++ b/testdata/p4_16_samples_outputs/string_ops-bmv2.p4.entries.txtpb @@ -0,0 +1,3 @@ +# proto-file: p4/v1/p4runtime.proto +# proto-message: p4.v1.WriteRequest + diff --git a/testdata/p4_16_samples_outputs/string_ops-bmv2.p4.p4info.txtpb b/testdata/p4_16_samples_outputs/string_ops-bmv2.p4.p4info.txtpb new file mode 100644 index 00000000000..fdf16790b91 --- /dev/null +++ b/testdata/p4_16_samples_outputs/string_ops-bmv2.p4.p4info.txtpb @@ -0,0 +1,6 @@ +# proto-file: p4/config/v1/p4info.proto +# proto-message: p4.config.v1.P4Info + +pkg_info { + arch: "v1model" +}