Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <core.p4>
- #include <psa.p4>
- header ethernet_h {
- bit<48> dstAddr;
- bit<48> srcAddr;
- bit<16> etherType;
- }
- struct headers_t {
- ethernet_h ethernet;
- }
- struct local_metadata_t {}
- struct empty_metadata_t {}
- parser ingress_parser(
- packet_in packet,
- out headers_t headers,
- inout local_metadata_t local_metadata,
- in psa_ingress_parser_input_metadata_t standard_metadata,
- in empty_metadata_t resub_meta,
- in empty_metadata_t recirc_meta) {
- state start {
- transition parse_ethernet;
- }
- state parse_ethernet {
- packet.extract(headers.ethernet);
- transition accept;
- }
- }
- control ingress(
- inout headers_t headers,
- inout local_metadata_t local_metadata1,
- in psa_ingress_input_metadata_t piim,
- inout psa_ingress_output_metadata_t piom) {
- apply {
- // bit<48> tmp = headers.ethernet.dstAddr;
- // headers.ethernet.dstAddr = headers.ethernet.srcAddr;
- // headers.ethernet.srcAddr = tmp;
- }
- }
- control ingress_deparser(
- packet_out packet,
- out empty_metadata_t clone_i2e_meta,
- out empty_metadata_t resubmit_meta,
- out empty_metadata_t normal_meta,
- inout headers_t headers,
- in local_metadata_t local_metadata,
- in psa_ingress_output_metadata_t istd) {
- apply {
- packet.emit(headers);
- }
- }
- parser egress_parser(packet_in packet, out headers_t headers, inout local_metadata_t local_metadata, in psa_egress_parser_input_metadata_t istd, in empty_metadata_t normal_meta, in empty_metadata_t clone_i2e_meta, in empty_metadata_t clone_e2e_meta) {
- state start {
- transition parse_ethernet;
- }
- state parse_ethernet {
- packet.extract(headers.ethernet);
- transition accept;
- }
- }
- control egress(inout headers_t headers, inout local_metadata_t local_metadata, in psa_egress_input_metadata_t istd, inout psa_egress_output_metadata_t ostd) {
- apply {
- bit<48> tmp = headers.ethernet.dstAddr;
- headers.ethernet.dstAddr = headers.ethernet.srcAddr;
- headers.ethernet.srcAddr = tmp;
- }
- }
- control egress_deparser(packet_out packet, out empty_metadata_t clone_e2e_meta, out empty_metadata_t recirculate_meta, inout headers_t headers, in local_metadata_t local_metadata, in psa_egress_output_metadata_t istd, in psa_egress_deparser_input_metadata_t edstd) {
- apply {
- packet.emit(headers);
- }
- }
- IngressPipeline(ingress_parser(), ingress(), ingress_deparser()) ip;
- EgressPipeline(egress_parser(), egress(), egress_deparser()) ep;
- PSA_Switch(ip, PacketReplicationEngine(), ep, BufferingQueueingEngine()) main;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement