1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use core::mem;
pub const ICMP_HDR_LEN: usize = mem::size_of::<IcmpHdr>();
#[repr(C)]
#[derive(Copy, Clone)]
pub struct IcmpHdr {
pub type_: u8,
pub code: u8,
pub checksum: u16,
pub un: IcmpHdrUn,
}
impl IcmpHdr {
pub const LEN: usize = mem::size_of::<IcmpHdr>();
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union IcmpHdrUn {
pub echo: IcmpHdrEcho,
pub gateway: u32,
pub frag: IcmpHdrFrag,
pub reserved: [u8; 4usize],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct IcmpHdrEcho {
pub id: u16,
pub sequence: u16,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct IcmpHdrFrag {
pub __unused: u16,
pub mtu: u16,
}