xref: /relibc/src/header/netinet_in/mod.rs (revision ed19381547d66b76981ea1e4ff942c5a4da45ab7)
1 #![allow(non_camel_case_types)]
2 
3 use crate::{header::sys_socket::sa_family_t, platform::types::*};
4 
5 pub type in_addr_t = u32;
6 pub type in_port_t = u16;
7 
8 #[repr(C)]
9 #[derive(Debug, Clone, Copy, Default)]
10 pub struct in_addr {
11     pub s_addr: in_addr_t,
12 }
13 
14 #[repr(C)]
15 pub struct in6_addr {
16     pub s6_addr: [u8; 16],
17 }
18 
19 #[repr(C)]
20 #[derive(Debug, Default)]
21 pub struct sockaddr_in {
22     pub sin_family: sa_family_t,
23     pub sin_port: in_port_t,
24     pub sin_addr: in_addr,
25     pub sin_zero: [c_char; 8],
26 }
27 
28 #[repr(C)]
29 pub struct sockaddr_in6 {
30     pub sin6_family: sa_family_t,
31     pub sin6_port: in_port_t,
32     pub sin6_flowinfo: u32,
33     pub sin6_addr: in6_addr,
34     pub sin6_scope_id: u32,
35 }
36 
37 #[repr(C)]
38 pub struct ipv6_mreq {
39     pub ipv6mr_multiaddr: in6_addr,
40     pub ipv6mr_interface: u32,
41 }
42 
43 // Address String Lengths
44 pub const INET_ADDRSTRLEN: c_int = 16;
45 pub const INET6_ADDRSTRLEN: c_int = 46;
46 
47 // Protocol Numbers
48 pub const IPPROTO_IP: u8 = 0x00;
49 pub const IPPROTO_ICMP: u8 = 0x01;
50 pub const IPPROTO_TCP: u8 = 0x06;
51 pub const IPPROTO_UDP: u8 = 0x11;
52 pub const IPPROTO_IPV6: u8 = 0x29;
53 pub const IPPROTO_RAW: u8 = 0xff;
54 pub const IPPROTO_MAX: u8 = 0xff;
55 
56 pub const INADDR_ANY: u32 = 0; // Can't use in_addr_t alias because cbindgen :(
57 pub const INADDR_BROADCAST: u32 = 0xFFFF_FFFF; // Can't use core::u32::MAX because cbindgen :(
58 pub const INADDR_NONE: u32 = 0xFFFF_FFFF;
59 pub const INADDR_LOOPBACK: u32 = 0x7F00_0001;
60 
61 pub const INADDR_UNSPEC_GROUP: u32 = 0xE000_0000;
62 pub const INADDR_ALLHOSTS_GROUP: u32 = 0xE000_0001;
63 pub const INADDR_ALLRTRS_GROUP: u32 = 0xE000_0002;
64 pub const INADDR_MAX_LOCAL_GROUP: u32 = 0xE000_00FF;
65 
66 #[no_mangle]
67 pub static in6addr_any: in6_addr = in6_addr {
68     s6_addr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
69 };
70 
71 #[no_mangle]
72 pub static in6addr_loopback: in6_addr = in6_addr {
73     s6_addr: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
74 };
75