+headers +parsers [udp, icmp, icmp6]

This commit is contained in:
Nico Schottelius 2019-02-22 00:01:53 +01:00
parent 8bc292564e
commit 214ccd4479
3 changed files with 49 additions and 3 deletions

View file

@ -66,7 +66,8 @@
**** See time table above **** See time table above
*** Additional features queue (to be discussed) *** Additional features queue (to be discussed)
**** TODO Offset based translation (v4->v6) -> same as range (?) **** TODO Offset based translation (v4->v6) -> same as range (?)
**** **** TODO IP address learning (v6/v4) for real life switch?
** Thesis documentation ** Thesis documentation
*** Motivation *** Motivation
TBD TBD

View file

@ -76,11 +76,35 @@ header tcp_t{
bit<16> urgentPtr; bit<16> urgentPtr;
} }
header udp_t {
bit<16> src_port;
bit<16> dst_port;
bit<16> payload_length;
bit<16> checksum;
}
header icmp6_t {
bit<8> type;
bit<8> code;
bit<16> checksum;
}
header icmp_t {
bit<8> type;
bit<8> code;
bit<16> checksum;
bit<32> rest;
}
struct headers { struct headers {
ethernet_t ethernet; ethernet_t ethernet;
ipv4_t ipv4; ipv4_t ipv4;
ipv6_t ipv6; ipv6_t ipv6;
tcp_t tcp; tcp_t tcp;
udp_t udp;
icmp6_t icmp6;
icmp_t icmp;
} }
struct metadata { struct metadata {

View file

@ -26,7 +26,10 @@ parser MyParser(packet_in packet,
meta.tcp_length = hdr.ipv4.totalLen - 16w20; meta.tcp_length = hdr.ipv4.totalLen - 16w20;
transition select(hdr.ipv4.protocol){ transition select(hdr.ipv4.protocol){
TYPE_TCP: tcp; PROTO_TCP: tcp;
PROTO_UDP: udp;
PROTO_ICMP: icmp;
default: accept; default: accept;
} }
} }
@ -36,16 +39,34 @@ parser MyParser(packet_in packet,
meta.tcp_length = hdr.ipv6.payload_length; meta.tcp_length = hdr.ipv6.payload_length;
transition select(hdr.ipv6.next_header){ transition select(hdr.ipv6.next_header){
TYPE_TCP: tcp; PROTO_TCP: tcp;
PROTO_UDP: udp;
PROTO_ICMP6: icmp6;
default: accept; default: accept;
} }
} }
/* Leaf */
state tcp { state tcp {
packet.extract(hdr.tcp); packet.extract(hdr.tcp);
transition accept; transition accept;
} }
state udp {
packet.extract(hdr.udp);
transition accept;
}
state icmp6 {
packet.extract(hdr.icmp6);
transition accept;
}
state icmp {
packet.extract(hdr.icmp);
transition accept;
}
} }
/************************************************************************* /*************************************************************************