@@ -11,7 +11,7 @@ error {
1111#define UDP_PORT_VXLAN 4789
1212#define UDP_PROTO 17
1313#define TCP_PROTO 6
14- #define IPV4_ETHTYPE 0x800
14+ #define IPV4_ETHTYPE 0x0800
1515#define IPV6_ETHTYPE 0x86dd
1616
1717parser sirius_parser (packet_in packet ,
@@ -22,7 +22,8 @@ parser sirius_parser(packet_in packet,
2222 state start {
2323 packet .extract (hd .ethernet );
2424 transition select (hd .ethernet .ether_type ) {
25- 0x0800 : parse_ipv4 ;
25+ IPV4_ETHTYPE : parse_ipv4 ;
26+ IPV6_ETHTYPE : parse_ipv6 ;
2627 default : accept ;
2728 }
2829 }
@@ -38,6 +39,15 @@ parser sirius_parser(packet_in packet,
3839 }
3940 }
4041
42+ state parse_ipv6 {
43+ packet .extract (hd .ipv6 );
44+ transition select (hd .ipv6 .next_header ) {
45+ UDP_PROTO : parse_udp ;
46+ TCP_PROTO : parse_tcp ;
47+ default : accept ;
48+ }
49+ }
50+
4151 state parse_udp {
4252 packet .extract (hd .udp );
4353 transition select (hd .udp .dst_port ) {
@@ -60,6 +70,7 @@ parser sirius_parser(packet_in packet,
6070 packet .extract (hd .inner_ethernet );
6171 transition select (hd .ethernet .ether_type ) {
6272 IPV4_ETHTYPE : parse_inner_ipv4 ;
73+ IPV6_ETHTYPE : parse_inner_ipv6 ;
6374 default : accept ;
6475 }
6576 }
@@ -75,6 +86,15 @@ parser sirius_parser(packet_in packet,
7586 }
7687 }
7788
89+ state parse_inner_ipv6 {
90+ packet .extract (hd .inner_ipv6 );
91+ transition select (hd .inner_ipv6 .next_header ) {
92+ UDP_PROTO : parse_inner_udp ;
93+ TCP_PROTO : parse_inner_tcp ;
94+ default : accept ;
95+ }
96+ }
97+
7898 state parse_inner_tcp {
7999 packet .extract (hd .inner_tcp );
80100 transition accept ;
0 commit comments