cross_socket/packet/
gre.rs1pub struct GrePacket {
3 pub checksum_present: u8,
4 pub routing_present: u8,
5 pub key_present: u8,
6 pub sequence_present: u8,
7 pub strict_source_route: u8,
8 pub recursion_control: u8,
9 pub zero_flags: u8,
10 pub version: u8,
11 pub protocol_type: u16,
12 pub checksum: Vec<u16>,
13 pub offset: Vec<u16>,
14 pub key: Vec<u16>,
15 pub sequence: Vec<u32>,
16 pub routing: Vec<u8>,
17 pub payload: Vec<u8>,
18}
19
20impl GrePacket {
21 pub fn gre_checksum_length(gre: &Self) -> usize {
22 (gre.checksum_present | gre.routing_present) as usize * 2
23 }
24 pub fn gre_offset_length(gre: &Self) -> usize {
25 (gre.checksum_present | gre.routing_present) as usize * 2
26 }
27 pub fn gre_key_length(gre: &Self) -> usize {
28 gre.key_present as usize * 4
29 }
30 pub fn gre_sequence_length(gre: &Self) -> usize {
31 gre.sequence_present as usize * 4
32 }
33 pub fn gre_routing_length(gre: &Self) -> usize {
34 if 0 == gre.routing_present {
35 0
36 } else {
37 panic!("Source routed GRE packets not supported")
38 }
39 }
40}