// 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. use shared::basetsd::{UINT16, UINT32, ULONG32, ULONG64}; use shared::guiddef::GUID; use shared::ntdef::{BOOLEAN, UCHAR, ULONG, USHORT, WCHAR}; pub type NET_IF_COMPARTMENT_ID = UINT32; pub type PNET_IF_COMPARTMENT_ID = *mut NET_IF_COMPARTMENT_ID; pub const NET_IF_COMPARTMENT_ID_UNSPECIFIED: NET_IF_COMPARTMENT_ID = 0; pub const NET_IF_COMPARTMENT_ID_PRIMARY: NET_IF_COMPARTMENT_ID = 1; pub type NET_IF_NETWORK_GUID = GUID; pub type PNET_IF_NETWORK_GUID = *mut NET_IF_NETWORK_GUID; ENUM!{enum NET_IF_OPER_STATUS { NET_IF_OPER_STATUS_UP = 1, NET_IF_OPER_STATUS_DOWN = 2, NET_IF_OPER_STATUS_TESTING = 3, NET_IF_OPER_STATUS_UNKNOWN = 4, NET_IF_OPER_STATUS_DORMANT = 5, NET_IF_OPER_STATUS_NOT_PRESENT = 6, NET_IF_OPER_STATUS_LOWER_LAYER_DOWN = 7, }} pub type PNET_IF_OPER_STATUS = *mut NET_IF_OPER_STATUS; pub type NET_IF_OBJECT_ID = ULONG32; pub type PNET_IF_OBJECT_ID = *mut NET_IF_OBJECT_ID; ENUM!{enum NET_IF_ADMIN_STATUS { NET_IF_ADMIN_STATUS_UP = 1, NET_IF_ADMIN_STATUS_DOWN = 2, NET_IF_ADMIN_STATUS_TESTING = 3, }} pub type PNET_IF_ADMIN_STATUS = *mut NET_IF_ADMIN_STATUS; pub type NET_IF_COMPARTMENT_SCOPE = UINT32; pub type PNET_IF_COMPARTMENT_SCOPE = *mut NET_IF_COMPARTMENT_SCOPE; pub const NET_IF_COMPARTMENT_SCOPE_UNSPECIFIED: NET_IF_COMPARTMENT_SCOPE = 0; pub const NET_IF_COMPARTMENT_SCOPE_ALL: NET_IF_COMPARTMENT_SCOPE = -1i32 as u32; ENUM!{enum NET_IF_RCV_ADDRESS_TYPE { NET_IF_RCV_ADDRESS_TYPE_OTHER = 1, NET_IF_RCV_ADDRESS_TYPE_VOLATILE = 2, NET_IF_RCV_ADDRESS_TYPE_NON_VOLATILE = 3, }} pub type PNET_IF_RCV_ADDRESS_TYPE = *mut NET_IF_RCV_ADDRESS_TYPE; STRUCT!{struct NET_IF_RCV_ADDRESS_LH { ifRcvAddressType: NET_IF_RCV_ADDRESS_TYPE, ifRcvAddressLength: USHORT, ifRcvAddressOffset: USHORT, }} pub type PNET_IF_RCV_ADDRESS_LH = *mut NET_IF_RCV_ADDRESS_LH; STRUCT!{struct NET_IF_ALIAS_LH { ifAliasLength: USHORT, ifAliasOffset: USHORT, }} pub type PNET_IF_ALIAS_LH = *mut NET_IF_ALIAS_LH; // FIXME: Switch to union version in 0.4 // STRUCT!{struct NET_LUID_LH_Info { // bitfield: ULONG64, // }} // BITFIELD!{NET_LUID_LH_Info bitfield: ULONG64 [ // Reserved set_Reserved[0..24], // NetLuidIndex set_NetLuidIndex[24..48], // IfType set_IfType[48..64], // ]} // UNION!{struct NET_LUID_LH { // [u64; 1], // Value Value_mut: ULONG64, // Info Info_mut: NET_LUID_LH_Info, // }} STRUCT!{struct NET_LUID_LH { Value: ULONG64, }} BITFIELD!{NET_LUID_LH Value: ULONG64 [ Reserved set_Reserved[0..24], NetLuidIndex set_NetLuidIndex[24..48], IfType set_IfType[48..64], ]} pub type PNET_LUID_LH = *mut NET_LUID_LH; pub type NET_IF_RCV_ADDRESS = NET_IF_RCV_ADDRESS_LH; pub type PNET_IF_RCV_ADDRESS = *mut NET_IF_RCV_ADDRESS; pub type NET_IF_ALIAS = NET_IF_ALIAS_LH; pub type PNET_IF_ALIAS = *mut NET_IF_ALIAS; pub type NET_LUID = NET_LUID_LH; pub type PNET_LUID = *mut NET_LUID; pub type IF_LUID = NET_LUID; pub type PIF_LUID = *mut NET_LUID; pub type NET_IFINDEX = ULONG; pub type PNET_IFINDEX = *mut NET_IFINDEX; pub type NET_IFTYPE = UINT16; pub type PNET_IFTYPE = *mut NET_IFTYPE; pub type IF_INDEX = NET_IFINDEX; pub type PIF_INDEX = *mut NET_IFINDEX; ENUM!{enum NET_IF_CONNECTION_TYPE { NET_IF_CONNECTION_DEDICATED = 1, NET_IF_CONNECTION_PASSIVE = 2, NET_IF_CONNECTION_DEMAND = 3, NET_IF_CONNECTION_MAXIMUM = 4, }} pub type PNET_IF_CONNECTION_TYPE = *mut NET_IF_CONNECTION_TYPE; ENUM!{enum TUNNEL_TYPE { TUNNEL_TYPE_NONE = 0, TUNNEL_TYPE_OTHER = 1, TUNNEL_TYPE_DIRECT = 2, TUNNEL_TYPE_6TO4 = 11, TUNNEL_TYPE_ISATAP = 13, TUNNEL_TYPE_TEREDO = 14, TUNNEL_TYPE_IPHTTPS = 15, }} pub type PTUNNEL_TYPE = *mut TUNNEL_TYPE; ENUM!{enum NET_IF_ACCESS_TYPE { NET_IF_ACCESS_LOOPBACK = 1, NET_IF_ACCESS_BROADCAST = 2, NET_IF_ACCESS_POINT_TO_POINT = 3, NET_IF_ACCESS_POINT_TO_MULTI_POINT = 4, NET_IF_ACCESS_MAXIMUM = 5, }} pub type PNET_IF_ACCESS_TYPE = *mut NET_IF_ACCESS_TYPE; ENUM!{enum NET_IF_DIRECTION_TYPE { NET_IF_DIRECTION_SENDRECEIVE, NET_IF_DIRECTION_SENDONLY, NET_IF_DIRECTION_RECEIVEONLY, NET_IF_DIRECTION_MAXIMUM, }} pub type PNET_IF_DIRECTION_TYPE = *mut NET_IF_DIRECTION_TYPE; ENUM!{enum NET_IF_MEDIA_CONNECT_STATE { MediaConnectStateUnknown, MediaConnectStateConnected, MediaConnectStateDisconnected, }} pub type PNET_IF_MEDIA_CONNECT_STATE = *mut NET_IF_MEDIA_CONNECT_STATE; ENUM!{enum NET_IF_MEDIA_DUPLEX_STATE { MediaDuplexStateUnknown = 0, MediaDuplexStateHalf = 1, MediaDuplexStateFull = 2, }} pub type PNET_IF_MEDIA_DUPLEX_STATE = *mut NET_IF_MEDIA_DUPLEX_STATE; STRUCT!{struct NET_PHYSICAL_LOCATION_LH { BusNumber: ULONG, SlotNumber: ULONG, FunctionNumber: ULONG, }} pub type PNET_PHYSICAL_LOCATION_LH = *mut NET_PHYSICAL_LOCATION_LH; pub const IF_MAX_STRING_SIZE: usize = 256; pub const IF_MAX_PHYS_ADDRESS_LENGTH: usize = 32; STRUCT!{struct IF_COUNTED_STRING_LH { Length: USHORT, String: [WCHAR; IF_MAX_STRING_SIZE + 1], }} pub type PIF_COUNTED_STRING_LH = *mut IF_COUNTED_STRING_LH; STRUCT!{struct IF_PHYSICAL_ADDRESS_LH { Length: USHORT, Address: [UCHAR; IF_MAX_PHYS_ADDRESS_LENGTH], }} pub type PIF_PHYSICAL_ADDRESS_LH = *mut IF_PHYSICAL_ADDRESS_LH; pub type NET_PHYSICAL_LOCATION = NET_PHYSICAL_LOCATION_LH; pub type PNET_PHYSICAL_LOCATION = *mut NET_PHYSICAL_LOCATION; pub type IF_COUNTED_STRING = IF_COUNTED_STRING_LH; pub type PIF_COUNTED_STRING = *mut IF_COUNTED_STRING; pub type IF_PHYSICAL_ADDRESS = IF_PHYSICAL_ADDRESS_LH; pub type PIF_PHYSICAL_ADDRESS = *mut IF_PHYSICAL_ADDRESS; ENUM!{enum IF_ADMINISTRATIVE_STATE { IF_ADMINISTRATIVE_DISABLED = 0, IF_ADMINISTRATIVE_ENABLED = 1, IF_ADMINISTRATIVE_DEMANDDIAL = 2, }} pub type PIF_ADMINISTRATIVE_STATE = *mut IF_ADMINISTRATIVE_STATE; ENUM!{enum IF_OPER_STATUS { IfOperStatusUp = 1, IfOperStatusDown, IfOperStatusTesting, IfOperStatusUnknown, IfOperStatusDormant, IfOperStatusNotPresent, IfOperStatusLowerLayerDown, }} STRUCT!{struct NDIS_INTERFACE_INFORMATION { ifOperStatus: NET_IF_OPER_STATUS, ifOperStatusFlags: ULONG, MediaConnectState: NET_IF_MEDIA_CONNECT_STATE, MediaDuplexState: NET_IF_MEDIA_DUPLEX_STATE, ifMtu: ULONG, ifPromiscuousMode: BOOLEAN, ifDeviceWakeUpEnable: BOOLEAN, XmitLinkSpeed: ULONG64, RcvLinkSpeed: ULONG64, ifLastChange: ULONG64, ifCounterDiscontinuityTime: ULONG64, ifInUnknownProtos: ULONG64, ifInDiscards: ULONG64, ifInErrors: ULONG64, ifHCInOctets: ULONG64, ifHCInUcastPkts: ULONG64, ifHCInMulticastPkts: ULONG64, ifHCInBroadcastPkts: ULONG64, ifHCOutOctets: ULONG64, ifHCOutUcastPkts: ULONG64, ifHCOutMulticastPkts: ULONG64, ifHCOutBroadcastPkts: ULONG64, ifOutErrors: ULONG64, ifOutDiscards: ULONG64, ifHCInUcastOctets: ULONG64, ifHCInMulticastOctets: ULONG64, ifHCInBroadcastOctets: ULONG64, ifHCOutUcastOctets: ULONG64, ifHCOutMulticastOctets: ULONG64, ifHCOutBroadcastOctets: ULONG64, CompartmentId: NET_IF_COMPARTMENT_ID, SupportedStatistics: ULONG, }} pub type PNDIS_INTERFACE_INFORMATION = *mut NDIS_INTERFACE_INFORMATION;