Advertisement
Guest User

main.p4

a guest
Sep 9th, 2022
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.59 KB | None | 0 0
  1. #include <core.p4>
  2. #include <psa.p4>
  3.  
  4. header ethernet_h {
  5.   bit<48>   dstAddr;
  6.   bit<48>   srcAddr;
  7.   bit<16>   etherType;
  8. }
  9.  
  10. struct headers_t {
  11.   ethernet_h   ethernet;
  12. }
  13.  
  14. struct local_metadata_t {}
  15. struct empty_metadata_t {}
  16.  
  17. parser ingress_parser(
  18.   packet_in packet,
  19.   out headers_t headers,
  20.   inout local_metadata_t local_metadata,
  21.   in psa_ingress_parser_input_metadata_t standard_metadata,
  22.   in empty_metadata_t resub_meta,
  23.   in empty_metadata_t recirc_meta) {
  24.  
  25.     state start {
  26.       transition parse_ethernet;
  27.     }
  28.     state parse_ethernet {
  29.       packet.extract(headers.ethernet);
  30.       transition accept;
  31.     }
  32. }
  33.  
  34. control ingress(
  35.   inout headers_t headers,
  36.   inout local_metadata_t local_metadata1,
  37.   in psa_ingress_input_metadata_t piim,
  38.   inout psa_ingress_output_metadata_t piom) {
  39.  
  40.     apply {
  41. //      bit<48> tmp = headers.ethernet.dstAddr;
  42. //      headers.ethernet.dstAddr = headers.ethernet.srcAddr;
  43. //      headers.ethernet.srcAddr = tmp;
  44.       }
  45. }
  46.  
  47. control ingress_deparser(
  48.     packet_out packet,
  49.     out empty_metadata_t clone_i2e_meta,
  50.     out empty_metadata_t resubmit_meta,
  51.     out empty_metadata_t normal_meta,
  52.     inout headers_t headers,
  53.     in local_metadata_t local_metadata,
  54.     in psa_ingress_output_metadata_t istd) {
  55.  
  56.     apply {
  57.       packet.emit(headers);
  58.     }
  59.  
  60. }
  61.  
  62. 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) {
  63.     state start {
  64.       transition parse_ethernet;
  65.     }
  66.     state parse_ethernet {
  67.       packet.extract(headers.ethernet);
  68.       transition accept;
  69.     }
  70. }
  71.  
  72. 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) {
  73.     apply {
  74.       bit<48> tmp = headers.ethernet.dstAddr;
  75.       headers.ethernet.dstAddr = headers.ethernet.srcAddr;
  76.       headers.ethernet.srcAddr = tmp;
  77.     }
  78. }
  79.  
  80. 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) {
  81.     apply {
  82.       packet.emit(headers);
  83.     }
  84. }
  85.  
  86. IngressPipeline(ingress_parser(), ingress(), ingress_deparser()) ip;
  87.  
  88. EgressPipeline(egress_parser(), egress(), egress_deparser()) ep;
  89.  
  90. PSA_Switch(ip, PacketReplicationEngine(), ep, BufferingQueueingEngine()) main;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement