blob: 0223297888cb3ccc34d5936e3e4cb74de3466080 [file] [log] [blame]
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001#ifndef __PARSER_P4__
2#define __PARSER_P4__
3#include "defines.p4"
4#include "headers.p4"
5
6header packet_in_t packet_in_hdr;
7header packet_out_t packet_out_hdr;
8header ethernet_t ethernet;
9header ipv4_t ipv4;
10header tcp_t tcp;
11header udp_t udp;
Carmelo Cascone4f011022017-06-05 01:41:02 -040012
13parser start {
Carmelo Casconef2ac7202017-09-08 00:57:44 +020014 // Hack to force deparsing of packet_in hdr.
15 // We assume it's impossible to receive a pkt with the first 8 bits of etherType 0.
16 // p4c-tofino complains when switching over 16 bits, i.e. the full etherType
17 return select(current(96, 8)) {
18 0 : parse_pkt_in;
19 default : default_parser;
Carmelo Cascone16de6db2017-08-22 00:27:57 +020020 }
21}
22
23parser parse_pkt_in {
24 extract(packet_in_hdr);
Carmelo Cascone4f011022017-06-05 01:41:02 -040025 return parse_ethernet;
26}
27
Carmelo Cascone16de6db2017-08-22 00:27:57 +020028parser default_parser {
29 return select(IGR_PORT_FIELD) {
30 CPU_PORT : parse_pkt_out;
31 default : parse_ethernet;
32 }
33}
Carmelo Cascone4f011022017-06-05 01:41:02 -040034
Carmelo Cascone16de6db2017-08-22 00:27:57 +020035parser parse_pkt_out {
36 extract(packet_out_hdr);
37 return parse_ethernet;
38}
Carmelo Cascone4f011022017-06-05 01:41:02 -040039
40parser parse_ethernet {
41 extract(ethernet);
42 return select(latest.etherType) {
43 ETHERTYPE_IPV4 : parse_ipv4;
44 default : ingress;
45 }
46}
47
Carmelo Cascone4f011022017-06-05 01:41:02 -040048parser parse_ipv4 {
49 extract(ipv4);
50 return select(latest.fragOffset, latest.protocol) {
51 IP_PROTOCOLS_TCP : parse_tcp;
52 IP_PROTOCOLS_UDP : parse_udp;
53 default: ingress;
54 }
55}
56
Carmelo Cascone4f011022017-06-05 01:41:02 -040057parser parse_tcp {
58 extract(tcp);
59 return ingress;
60}
61
Carmelo Cascone4f011022017-06-05 01:41:02 -040062parser parse_udp {
63 extract(udp);
64 return ingress;
Carmelo Cascone16de6db2017-08-22 00:27:57 +020065}
66
67#endif