| // Licensed under the Apache License, Version 2.0 |
| // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license |
| // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. |
| // All files in the project carrying such notice may not be copied, modified, or distributed |
| // except according to those terms. |
| //! TCP/IP specific information for use by WinSock2 compatible applications. |
| use ctypes::c_int; |
| use shared::in6addr::IN6_ADDR; |
| use shared::inaddr::IN_ADDR; |
| use shared::minwindef::{ULONG, USHORT}; |
| use shared::ws2def::{ADDRESS_FAMILY, SCOPE_ID, SOCKADDR_IN}; |
| pub const IFF_UP: ULONG = 0x00000001; |
| pub const IFF_BROADCAST: ULONG = 0x00000002; |
| pub const IFF_LOOPBACK: ULONG = 0x00000004; |
| pub const IFF_POINTTOPOINT: ULONG = 0x00000008; |
| pub const IFF_MULTICAST: ULONG = 0x00000010; |
| pub const IP_OPTIONS: c_int = 1; |
| pub const IP_HDRINCL: c_int = 2; |
| pub const IP_TOS: c_int = 3; |
| pub const IP_TTL: c_int = 4; |
| pub const IP_MULTICAST_IF: c_int = 9; |
| pub const IP_MULTICAST_TTL: c_int = 10; |
| pub const IP_MULTICAST_LOOP: c_int = 11; |
| pub const IP_ADD_MEMBERSHIP: c_int = 12; |
| pub const IP_DROP_MEMBERSHIP: c_int = 13; |
| pub const IP_DONTFRAGMENT: c_int = 14; |
| pub const IP_ADD_SOURCE_MEMBERSHIP: c_int = 15; |
| pub const IP_DROP_SOURCE_MEMBERSHIP: c_int = 16; |
| pub const IP_BLOCK_SOURCE: c_int = 17; |
| pub const IP_UNBLOCK_SOURCE: c_int = 18; |
| pub const IP_PKTINFO: c_int = 19; |
| pub const IP_RECEIVE_BROADCAST: c_int = 22; |
| pub const IP_RECVDSTADDR: c_int = 25; |
| UNION!{union SOCKADDR_IN6_LH_u { |
| [u32; 1], |
| sin6_scope_id sin6_scope_id_mut: ULONG, |
| sin6_scope_struct sin6_scope_struct_mut: SCOPE_ID, |
| }} |
| STRUCT!{struct SOCKADDR_IN6_LH { |
| sin6_family: ADDRESS_FAMILY, |
| sin6_port: USHORT, |
| sin6_flowinfo: ULONG, |
| sin6_addr: IN6_ADDR, |
| u: SOCKADDR_IN6_LH_u, |
| }} |
| pub type PSOCKADDR_IN6_LH = *mut SOCKADDR_IN6_LH; |
| pub type SOCKADDR_IN6 = SOCKADDR_IN6_LH; |
| pub type PSOCKADDR_IN6 = *mut SOCKADDR_IN6; |
| STRUCT!{struct SOCKADDR_IN6_PAIR { |
| SourceAddress: PSOCKADDR_IN6, |
| DestinationAddress: PSOCKADDR_IN6, |
| }} |
| pub type PSOCKADDR_IN6_PAIR = *mut SOCKADDR_IN6_PAIR; |
| UNION!{union SOCKADDR_INET { |
| [u32; 7], |
| Ipv4 Ipv4_mut: SOCKADDR_IN, |
| Ipv6 Ipv6_mut: SOCKADDR_IN6, |
| si_family si_family_mut: ADDRESS_FAMILY, |
| }} |
| pub type PSOCKADDR_INET = *mut SOCKADDR_INET; |
| STRUCT!{struct IP_MREQ { |
| imr_multiaddr: IN_ADDR, |
| imr_interface: IN_ADDR, |
| }} |
| pub type PIP_MREQ = *mut IP_MREQ; |
| STRUCT!{struct IP_MREQ_SOURCE { |
| imr_multiaddr: IN_ADDR, |
| imr_sourceaddr: IN_ADDR, |
| imr_interface: IN_ADDR, |
| }} |
| pub type PIP_MREQ_SOURCE = *mut IP_MREQ_SOURCE; |
| pub const IPV6_HOPOPTS: c_int = 1; |
| pub const IPV6_HDRINCL: c_int = 2; |
| pub const IPV6_UNICAST_HOPS: c_int = 4; |
| pub const IPV6_MULTICAST_IF: c_int = 9; |
| pub const IPV6_MULTICAST_HOPS: c_int = 10; |
| pub const IPV6_MULTICAST_LOOP: c_int = 11; |
| pub const IPV6_ADD_MEMBERSHIP: c_int = 12; |
| pub const IPV6_JOIN_GROUP: c_int = IPV6_ADD_MEMBERSHIP; |
| pub const IPV6_DROP_MEMBERSHIP: c_int = 13; |
| pub const IPV6_LEAVE_GROUP: c_int = IPV6_DROP_MEMBERSHIP; |
| pub const IPV6_DONTFRAG: c_int = 14; |
| pub const IPV6_PKTINFO: c_int = 19; |
| pub const IPV6_HOPLIMIT: c_int = 21; |
| pub const IPV6_PROTECTION_LEVEL: c_int = 23; |
| pub const IPV6_RECVIF: c_int = 24; |
| pub const IPV6_RECVDSTADDR: c_int = 25; |
| pub const IPV6_CHECKSUM: c_int = 26; |
| pub const IPV6_V6ONLY: c_int = 27; |
| pub const IPV6_IFLIST: c_int = 28; |
| pub const IPV6_ADD_IFLIST: c_int = 29; |
| pub const IPV6_DEL_IFLIST: c_int = 30; |
| pub const IPV6_UNICAST_IF: c_int = 31; |
| pub const IPV6_RTHDR: c_int = 32; |
| pub const IPV6_RECVRTHDR: c_int = 38; |
| pub const IPV6_TCLASS: c_int = 39; |
| pub const IPV6_RECVTCLASS: c_int = 40; |
| STRUCT!{struct IPV6_MREQ { |
| ipv6mr_multiaddr: IN6_ADDR, |
| ipv6mr_interface: ULONG, |
| }} |
| pub type PIPV6_MREQ = *mut IPV6_MREQ; |
| STRUCT!{struct IN_PKTINFO { |
| ipi_addr: IN_ADDR, |
| ipi_ifindex: ULONG, |
| }} |
| pub type PIN_PKTINFO = *mut IN_PKTINFO; |
| STRUCT!{struct IN6_PKTINFO { |
| ipi6_addr: IN6_ADDR, |
| ipi6_ifindex: ULONG, |
| }} |
| pub type PIN6_PKTINFO = *mut IN6_PKTINFO; |