rust_p2p_core/route/
mod.rs

1use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4};
2
3pub mod route_table;
4
5pub const DEFAULT_RTT: u32 = 9999;
6
7use crate::tunnel::udp::UDPIndex;
8#[non_exhaustive]
9#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug)]
10pub enum Index {
11    Udp(UDPIndex),
12    Tcp(usize),
13}
14impl Index {
15    pub fn index(&self) -> usize {
16        match self {
17            Index::Udp(index) => index.index(),
18            Index::Tcp(index) => *index,
19        }
20    }
21    pub fn protocol(&self) -> ConnectProtocol {
22        match self {
23            Index::Tcp(_) => ConnectProtocol::TCP,
24            Index::Udp(_) => ConnectProtocol::UDP,
25        }
26    }
27}
28#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug)]
29pub struct RouteKey {
30    index: Index,
31    addr: SocketAddr,
32}
33impl Default for RouteKey {
34    fn default() -> Self {
35        Self {
36            index: Index::Tcp(0),
37            addr: SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, 0)),
38        }
39    }
40}
41impl RouteKey {
42    pub(crate) const fn new(index: Index, addr: SocketAddr) -> Self {
43        Self { index, addr }
44    }
45    #[inline]
46    pub fn protocol(&self) -> ConnectProtocol {
47        self.index.protocol()
48    }
49    #[inline]
50    pub fn index(&self) -> Index {
51        self.index
52    }
53    #[inline]
54    pub fn index_usize(&self) -> usize {
55        self.index.index()
56    }
57    #[inline]
58    pub fn addr(&self) -> SocketAddr {
59        self.addr
60    }
61}
62#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug)]
63pub struct RouteSortKey {
64    metric: u8,
65    rtt: u32,
66}
67
68#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
69pub enum ConnectProtocol {
70    UDP,
71    TCP,
72}
73impl ConnectProtocol {
74    #[inline]
75    pub fn is_tcp(&self) -> bool {
76        self == &ConnectProtocol::TCP
77    }
78    #[inline]
79    pub fn is_udp(&self) -> bool {
80        self == &ConnectProtocol::UDP
81    }
82}