// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. // #include // #include // #include use shared::basetsd::ULONG64; use shared::in6addr::in6_addr; use shared::ntdef::{INT, PUCHAR, PVOID, UCHAR, ULONG, USHORT, WCHAR}; pub const MAX_ADAPTER_NAME: usize = 128; pub const MAX_OPT_SIZE: usize = 40; pub type IPAddr = ULONG; pub type IPMask = ULONG; pub type IP_STATUS = ULONG; pub type IPv6Addr = in6_addr; STRUCT!{struct IP_OPTION_INFORMATION { Ttl: UCHAR, Tos: UCHAR, Flags: UCHAR, OptionsSize: UCHAR, OptionsData: PUCHAR, }} pub type PIP_OPTION_INFORMATION = *mut IP_OPTION_INFORMATION; #[cfg(target_arch = "x86_64")] STRUCT!{struct IP_OPTION_INFORMATION32 { Ttl: UCHAR, Tos: UCHAR, Flags: UCHAR, OptionsSize: UCHAR, OptionsData: u32, // UCHAR * POINTER_32 }} #[cfg(target_arch = "x86_64")] pub type PIP_OPTION_INFORMATION32 = *mut IP_OPTION_INFORMATION32; STRUCT!{struct ICMP_ECHO_REPLY { Address: IPAddr, Status: ULONG, RoundTripTime: ULONG, DataSize: USHORT, Reserved: USHORT, Data: PVOID, Options: IP_OPTION_INFORMATION, }} pub type PICMP_ECHO_REPLY = *mut ICMP_ECHO_REPLY; #[cfg(target_arch = "x86_64")] STRUCT!{struct ICMP_ECHO_REPLY32 { Address: IPAddr, Status: ULONG, RoundTripTime: ULONG, DataSize: USHORT, Reserved: USHORT, Data: u32, // VOID * POINTER_32 Options: IP_OPTION_INFORMATION32, }} #[cfg(target_arch = "x86_64")] pub type PICMP_ECHO_REPLY32 = *mut ICMP_ECHO_REPLY32; STRUCT!{#[repr(packed)] struct IPV6_ADDRESS_EX { sin6_port: USHORT, sin6_flowinfo: ULONG, sin6_addr: [USHORT; 8], sin6_scope_id: ULONG, }} pub type PIPV6_ADDRESS_EX = *mut IPV6_ADDRESS_EX; // #include STRUCT!{struct ICMPV6_ECHO_REPLY_LH { Address: IPV6_ADDRESS_EX, Status: ULONG, RoundTripTime: INT, }} pub type PICMPV6_ECHO_REPLY_LH = *mut ICMPV6_ECHO_REPLY_LH; pub type ICMPV6_ECHO_REPLY = ICMPV6_ECHO_REPLY_LH; pub type PICMPV6_ECHO_REPLY = *mut ICMPV6_ECHO_REPLY; // #endif STRUCT!{struct ARP_SEND_REPLY { DestAddress: IPAddr, SrcAddress: IPAddr, }} pub type PARP_SEND_REPLY = *mut ARP_SEND_REPLY; STRUCT!{struct TCP_RESERVE_PORT_RANGE { UpperRange: USHORT, LowerRange: USHORT, }} pub type PTCP_RESERVE_PORT_RANGE = *mut TCP_RESERVE_PORT_RANGE; STRUCT!{struct IP_ADAPTER_INDEX_MAP { Index: ULONG, Name: [WCHAR; MAX_ADAPTER_NAME], }} pub type PIP_ADAPTER_INDEX_MAP = *mut IP_ADAPTER_INDEX_MAP; STRUCT!{struct IP_INTERFACE_INFO { NumAdapters: ULONG, Adapter: [IP_ADAPTER_INDEX_MAP; 1], }} pub type PIP_INTERFACE_INFO = *mut IP_INTERFACE_INFO; STRUCT!{struct IP_UNIDIRECTIONAL_ADAPTER_ADDRESS { NumAdapters: ULONG, Address: [IPAddr; 1], }} pub type PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS = *mut IP_UNIDIRECTIONAL_ADAPTER_ADDRESS; STRUCT!{struct IP_ADAPTER_ORDER_MAP { NumAdapters: ULONG, AdapterOrder: [ULONG; 1], }} pub type PIP_ADAPTER_ORDER_MAP = *mut IP_ADAPTER_ORDER_MAP; STRUCT!{struct IP_MCAST_COUNTER_INFO { InMcastOctets: ULONG64, OutMcastOctets: ULONG64, InMcastPkts: ULONG64, OutMcastPkts: ULONG64, }} pub type PIP_MCAST_COUNTER_INFO = *mut IP_MCAST_COUNTER_INFO; // IP_STATUS codes returned from IP APIs pub const IP_STATUS_BASE: IP_STATUS = 11000; pub const IP_SUCCESS: IP_STATUS = 0; pub const IP_BUF_TOO_SMALL: IP_STATUS = IP_STATUS_BASE + 1; pub const IP_DEST_NET_UNREACHABLE: IP_STATUS = IP_STATUS_BASE + 2; pub const IP_DEST_HOST_UNREACHABLE: IP_STATUS = IP_STATUS_BASE + 3; pub const IP_DEST_PROT_UNREACHABLE: IP_STATUS = IP_STATUS_BASE + 4; pub const IP_DEST_PORT_UNREACHABLE: IP_STATUS = IP_STATUS_BASE + 5; pub const IP_NO_RESOURCES: IP_STATUS = IP_STATUS_BASE + 6; pub const IP_BAD_OPTION: IP_STATUS = IP_STATUS_BASE + 7; pub const IP_HW_ERROR: IP_STATUS = IP_STATUS_BASE + 8; pub const IP_PACKET_TOO_BIG: IP_STATUS = IP_STATUS_BASE + 9; pub const IP_REQ_TIMED_OUT: IP_STATUS = IP_STATUS_BASE + 10; pub const IP_BAD_REQ: IP_STATUS = IP_STATUS_BASE + 11; pub const IP_BAD_ROUTE: IP_STATUS = IP_STATUS_BASE + 12; pub const IP_TTL_EXPIRED_TRANSIT: IP_STATUS = IP_STATUS_BASE + 13; pub const IP_TTL_EXPIRED_REASSEM: IP_STATUS = IP_STATUS_BASE + 14; pub const IP_PARAM_PROBLEM: IP_STATUS = IP_STATUS_BASE + 15; pub const IP_SOURCE_QUENCH: IP_STATUS = IP_STATUS_BASE + 16; pub const IP_OPTION_TOO_BIG: IP_STATUS = IP_STATUS_BASE + 17; pub const IP_BAD_DESTINATION: IP_STATUS = IP_STATUS_BASE + 18; pub const IP_DEST_NO_ROUTE: IP_STATUS = IP_STATUS_BASE + 2; pub const IP_DEST_ADDR_UNREACHABLE: IP_STATUS = IP_STATUS_BASE + 3; pub const IP_DEST_PROHIBITED: IP_STATUS = IP_STATUS_BASE + 4; pub const IP_HOP_LIMIT_EXCEEDED: IP_STATUS = IP_STATUS_BASE + 13; pub const IP_REASSEMBLY_TIME_EXCEEDED: IP_STATUS = IP_STATUS_BASE + 14; pub const IP_PARAMETER_PROBLEM: IP_STATUS = IP_STATUS_BASE + 15; pub const IP_DEST_UNREACHABLE: IP_STATUS = IP_STATUS_BASE + 40; pub const IP_TIME_EXCEEDED: IP_STATUS = IP_STATUS_BASE + 41; pub const IP_BAD_HEADER: IP_STATUS = IP_STATUS_BASE + 42; pub const IP_UNRECOGNIZED_NEXT_HEADER: IP_STATUS = IP_STATUS_BASE + 43; pub const IP_ICMP_ERROR: IP_STATUS = IP_STATUS_BASE + 44; pub const IP_DEST_SCOPE_MISMATCH: IP_STATUS = IP_STATUS_BASE + 45; pub const IP_ADDR_DELETED: IP_STATUS = IP_STATUS_BASE + 19; pub const IP_SPEC_MTU_CHANGE: IP_STATUS = IP_STATUS_BASE + 20; pub const IP_MTU_CHANGE: IP_STATUS = IP_STATUS_BASE + 21; pub const IP_UNLOAD: IP_STATUS = IP_STATUS_BASE + 22; pub const IP_ADDR_ADDED: IP_STATUS = IP_STATUS_BASE + 23; pub const IP_MEDIA_CONNECT: IP_STATUS = IP_STATUS_BASE + 24; pub const IP_MEDIA_DISCONNECT: IP_STATUS = IP_STATUS_BASE + 25; pub const IP_BIND_ADAPTER: IP_STATUS = IP_STATUS_BASE + 26; pub const IP_UNBIND_ADAPTER: IP_STATUS = IP_STATUS_BASE + 27; pub const IP_DEVICE_DOES_NOT_EXIST: IP_STATUS = IP_STATUS_BASE + 28; pub const IP_DUPLICATE_ADDRESS: IP_STATUS = IP_STATUS_BASE + 29; pub const IP_INTERFACE_METRIC_CHANGE: IP_STATUS = IP_STATUS_BASE + 30; pub const IP_RECONFIG_SECFLTR: IP_STATUS = IP_STATUS_BASE + 31; pub const IP_NEGOTIATING_IPSEC: IP_STATUS = IP_STATUS_BASE + 32; pub const IP_INTERFACE_WOL_CAPABILITY_CHANGE: IP_STATUS = IP_STATUS_BASE + 33; pub const IP_DUPLICATE_IPADD: IP_STATUS = IP_STATUS_BASE + 34; pub const IP_GENERAL_FAILURE: IP_STATUS = IP_STATUS_BASE + 50; pub const MAX_IP_STATUS: IP_STATUS = IP_GENERAL_FAILURE; pub const IP_PENDING: IP_STATUS = IP_STATUS_BASE + 255; pub const IP_FLAG_REVERSE: UCHAR = 0x1; pub const IP_FLAG_DF: UCHAR = 0x2; pub const IP_OPT_EOL: u8 = 0; pub const IP_OPT_NOP: u8 = 1; pub const IP_OPT_SECURITY: u8 = 0x82; pub const IP_OPT_LSRR: u8 = 0x83; pub const IP_OPT_SSRR: u8 = 0x89; pub const IP_OPT_RR: u8 = 0x7; pub const IP_OPT_TS: u8 = 0x44; pub const IP_OPT_SID: u8 = 0x88; pub const IP_OPT_ROUTER_ALERT: u8 = 0x94;