1use std::net::{IpAddr, SocketAddr};
2
3#[repr(u8)]
5#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
6pub enum EcnCodepoint {
7    #[doc(hidden)]
8    Ect0 = 0b10,
9    #[doc(hidden)]
10    Ect1 = 0b01,
11    #[doc(hidden)]
12    Ce = 0b11,
13}
14
15impl EcnCodepoint {
16    pub fn from_bits(x: u8) -> Option<Self> {
18        use self::EcnCodepoint::*;
19        Some(match x & 0b11 {
20            0b10 => Ect0,
21            0b01 => Ect1,
22            0b11 => Ce,
23            _ => {
24                return None;
25            }
26        })
27    }
28}
29
30#[derive(Debug)]
31pub struct Transmit {
32    pub destination: SocketAddr,
34    pub ecn: Option<EcnCodepoint>,
36    pub contents: Vec<u8>,
38    pub segment_size: Option<usize>,
41    pub src_ip: Option<IpAddr>,
43}