You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
1.9 KiB
158 lines
1.9 KiB
// Copyright (c) PLUMgrid, Inc.
|
|
// Licensed under the Apache License, Version 2.0 (the "License")
|
|
|
|
#packed "true"
|
|
|
|
struct ethernet {
|
|
u64 dst:48;
|
|
u64 src:48;
|
|
u32 type:16;
|
|
};
|
|
|
|
state ethernet {
|
|
switch $ethernet.type {
|
|
case 0x0800 {
|
|
next proto::ip;
|
|
};
|
|
case 0x8100 {
|
|
next proto::dot1q;
|
|
};
|
|
case * {
|
|
goto EOP;
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
struct dot1q {
|
|
u32 pri:3;
|
|
u32 cfi:1;
|
|
u32 vlanid:12;
|
|
u32 type:16;
|
|
};
|
|
|
|
state dot1q {
|
|
switch $dot1q.type {
|
|
case 0x0800 {
|
|
next proto::ip;
|
|
};
|
|
case * {
|
|
goto EOP;
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
struct ip {
|
|
u32 ver:4;
|
|
u32 hlen:4;
|
|
u32 tos:8;
|
|
u32 tlen:16;
|
|
u32 identification:16;
|
|
u32 ffo_unused:1;
|
|
u32 df:1;
|
|
u32 mf:1;
|
|
u32 foffset:13;
|
|
u32 ttl:8;
|
|
u32 nextp:8;
|
|
u32 hchecksum:16;
|
|
u32 src:32;
|
|
u32 dst:32;
|
|
};
|
|
|
|
state ip {
|
|
switch $ip.nextp {
|
|
case 6 {
|
|
next proto::tcp;
|
|
};
|
|
case 17 {
|
|
next proto::udp;
|
|
};
|
|
case 47 {
|
|
next proto::gre;
|
|
};
|
|
case * {
|
|
goto EOP;
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
struct udp {
|
|
u32 sport:16;
|
|
u32 dport:16;
|
|
u32 length:16;
|
|
u32 crc:16;
|
|
};
|
|
|
|
state udp {
|
|
switch $udp.dport {
|
|
case 8472 {
|
|
next proto::vxlan;
|
|
};
|
|
case * {
|
|
goto EOP;
|
|
};
|
|
}
|
|
}
|
|
|
|
struct tcp {
|
|
u16 src_port:16;
|
|
u16 dst_port:16;
|
|
u32 seq_num:32;
|
|
u32 ack_num:32;
|
|
u8 offset:4;
|
|
u8 reserved:4;
|
|
u8 flag_cwr:1;
|
|
u8 flag_ece:1;
|
|
u8 flag_urg:1;
|
|
u8 flag_ack:1;
|
|
u8 flag_psh:1;
|
|
u8 flag_rst:1;
|
|
u8 flag_syn:1;
|
|
u8 flag_fin:1;
|
|
u16 rcv_wnd:16;
|
|
u16 cksum:16;
|
|
u16 urg_ptr:16;
|
|
};
|
|
|
|
state tcp {
|
|
goto EOP;
|
|
}
|
|
|
|
struct vxlan {
|
|
u32 rsv1:4;
|
|
u32 iflag:1;
|
|
u32 rsv2:3;
|
|
u32 rsv3:24;
|
|
u32 key:24;
|
|
u32 rsv4:8;
|
|
};
|
|
|
|
state vxlan {
|
|
goto EOP;
|
|
}
|
|
|
|
|
|
struct gre {
|
|
u32 cflag:1;
|
|
u32 rflag:1;
|
|
u32 kflag:1;
|
|
u32 snflag:1;
|
|
u32 srflag:1;
|
|
u32 recurflag:3;
|
|
u32 reserved:5;
|
|
u32 vflag:3;
|
|
u32 protocol:16;
|
|
u32 key:32;
|
|
};
|
|
|
|
state gre {
|
|
switch $gre.protocol {
|
|
case * {
|
|
goto EOP;
|
|
};
|
|
}
|
|
}
|
|
|