lx/net/
inet.rs

1use core::fmt::{
2    self,
3    Display,
4    Formatter,
5};
6
7use super::{
8    SockAddr,
9    AF_INET,
10    AF_INET6,
11};
12
13#[repr(C)]
14#[derive(Clone, Copy)]
15pub struct SockAddrIn {
16    family: u16,
17    pub port: u16,
18    pub addr: u32,
19    zero: [u8; 8],
20}
21
22impl SockAddrIn {
23    pub fn new(addr: [u8; 4], port: u16) -> Self {
24        Self {
25            family: AF_INET.into(),
26            port: port.to_be(),
27            addr: u32::from_ne_bytes(addr),
28            zero: [0u8; 8],
29        }
30    }
31}
32
33unsafe impl SockAddr for SockAddrIn {
34    fn family() -> u8 {
35        AF_INET
36    }
37}
38
39impl Display for SockAddrIn {
40    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
41        let parts = self.addr.to_ne_bytes();
42        write!(
43            f,
44            "{}.{}.{}.{}:{}",
45            parts[0],
46            parts[1],
47            parts[2],
48            parts[3],
49            u16::from_be(self.port)
50        )
51    }
52}
53
54#[repr(C)]
55#[derive(Clone, Copy)]
56pub struct SockAddrIn6 {
57    family: u16,
58    pub port: u16,
59    pub flowinfo: u32,
60    pub addr: [u16; 8],
61    pub scope_id: u32,
62}
63
64impl SockAddrIn6 {
65    pub fn new(addr: [u16; 8], port: u16) -> Self {
66        Self {
67            family: AF_INET6.into(),
68            flowinfo: 0,
69            port: port.to_be(),
70            addr,
71            scope_id: 0,
72        }
73    }
74}
75
76unsafe impl SockAddr for SockAddrIn6 {
77    fn family() -> u8 {
78        AF_INET6
79    }
80}
81
82impl Display for SockAddrIn6 {
83    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
84        write!(
85            f,
86            "[{:x}:{:x}:{:x}:{:x}:{:x}:{:x}:{:x}:{:x}]:{}",
87            self.addr[0],
88            self.addr[1],
89            self.addr[2],
90            self.addr[3],
91            self.addr[4],
92            self.addr[5],
93            self.addr[6],
94            self.addr[7],
95            u16::from_be(self.port)
96        )
97    }
98}