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