winapi_ui_automation/um/
iptypes.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6use shared::basetsd::{UINT8, ULONG64};
7use shared::guiddef::GUID;
8use shared::ifdef::{
9    IF_INDEX, IF_LUID, IF_OPER_STATUS, NET_IF_COMPARTMENT_ID, NET_IF_CONNECTION_TYPE,
10    NET_IF_NETWORK_GUID, TUNNEL_TYPE
11};
12use shared::ipifcons::IFTYPE;
13use shared::minwindef::{BOOL, BYTE, DWORD, UCHAR, UINT};
14use shared::nldef::{NL_DAD_STATE, NL_PREFIX_ORIGIN, NL_SUFFIX_ORIGIN};
15use shared::ntdef::{CHAR, PCHAR, PWCHAR, ULONG, ULONGLONG, WCHAR};
16use shared::ws2def::SOCKET_ADDRESS;
17use ucrt::corecrt::time_t;
18pub const MAX_ADAPTER_DESCRIPTION_LENGTH: usize = 128;
19pub const MAX_ADAPTER_NAME_LENGTH: usize = 256;
20pub const MAX_ADAPTER_ADDRESS_LENGTH: usize = 8;
21pub const DEFAULT_MINIMUM_ENTITIES: usize = 32;
22pub const MAX_HOSTNAME_LEN: usize = 128;
23pub const MAX_DOMAIN_NAME_LEN: usize = 128;
24pub const MAX_SCOPE_ID_LEN: usize = 256;
25pub const MAX_DHCPV6_DUID_LENGTH: usize = 130;
26pub const MAX_DNS_SUFFIX_STRING_LENGTH: usize = 256;
27pub const BROADCAST_NODETYPE: usize = 1;
28pub const PEER_TO_PEER_NODETYPE: usize = 2;
29pub const MIXED_NODETYPE: usize = 4;
30pub const HYBRID_NODETYPE: usize = 8;
31STRUCT!{struct IP_ADDRESS_STRING {
32    String: [CHAR; 4*4],
33}}
34pub type PIP_ADDRESS_STRING = *mut IP_ADDRESS_STRING;
35pub type IP_MASK_STRING = IP_ADDRESS_STRING;
36pub type PIP_MASK_STRING = *mut IP_MASK_STRING;
37STRUCT!{struct IP_ADDR_STRING {
38    Next: *mut IP_ADDR_STRING,
39    IpAddress: IP_ADDRESS_STRING,
40    IpMask: IP_MASK_STRING,
41    Context: DWORD,
42}}
43pub type PIP_ADDR_STRING = *mut IP_ADDR_STRING;
44STRUCT!{struct IP_ADAPTER_INFO {
45    Next: *mut IP_ADAPTER_INFO,
46    ComboIndex: DWORD,
47    AdapterName: [CHAR; MAX_ADAPTER_NAME_LENGTH + 4],
48    Description: [CHAR; MAX_ADAPTER_DESCRIPTION_LENGTH + 4],
49    AddressLength: UINT,
50    Address: [BYTE; MAX_ADAPTER_ADDRESS_LENGTH],
51    Index: DWORD,
52    Type: UINT,
53    DhcpEnabled: UINT,
54    CurrentIpAddress: PIP_ADDR_STRING,
55    IpAddressList: IP_ADDR_STRING,
56    GatewayList: IP_ADDR_STRING,
57    DhcpServer: IP_ADDR_STRING,
58    HaveWins: BOOL,
59    PrimaryWinsServer: IP_ADDR_STRING,
60    SecondaryWinsServer: IP_ADDR_STRING,
61    LeaseObtained: time_t,
62    LeaseExpires: time_t,
63}}
64pub type PIP_ADAPTER_INFO = *mut IP_ADAPTER_INFO;
65pub type IP_PREFIX_ORIGIN = NL_PREFIX_ORIGIN;
66pub type IP_SUFFIX_ORIGIN = NL_SUFFIX_ORIGIN;
67pub type IP_DAD_STATE = NL_DAD_STATE;
68STRUCT!{struct IP_ADAPTER_UNICAST_ADDRESS_LH_u_s {
69    Length: ULONG,
70    Flags: DWORD,
71}}
72UNION!{union IP_ADAPTER_UNICAST_ADDRESS_LH_u {
73    [u64; 1],
74    Alignment Alignment_mut: ULONGLONG,
75    s s_mut: IP_ADAPTER_UNICAST_ADDRESS_LH_u_s,
76}}
77STRUCT!{struct IP_ADAPTER_UNICAST_ADDRESS_LH {
78    u: IP_ADAPTER_UNICAST_ADDRESS_LH_u,
79    Next: *mut IP_ADAPTER_UNICAST_ADDRESS_LH,
80    Address: SOCKET_ADDRESS,
81    PrefixOrigin: IP_PREFIX_ORIGIN,
82    SuffixOrigin: IP_SUFFIX_ORIGIN,
83    DadState: IP_DAD_STATE,
84    ValidLifetime: ULONG,
85    PreferredLifetime: ULONG,
86    LeaseLifetime: ULONG,
87    OnLinkPrefixLength: UINT8,
88}}
89pub type PIP_ADAPTER_UNICAST_ADDRESS_LH = *mut IP_ADAPTER_UNICAST_ADDRESS_LH;
90STRUCT!{struct IP_ADAPTER_UNICAST_ADDRESS_XP_u_s {
91    Length: ULONG,
92    Flags: DWORD,
93}}
94UNION!{union IP_ADAPTER_UNICAST_ADDRESS_XP_u {
95    [u64; 1],
96    Alignment Alignment_mut: ULONGLONG,
97    s s_mut: IP_ADAPTER_UNICAST_ADDRESS_XP_u_s,
98}}
99STRUCT!{struct IP_ADAPTER_UNICAST_ADDRESS_XP {
100    u: IP_ADAPTER_UNICAST_ADDRESS_XP_u,
101    Next: *mut IP_ADAPTER_UNICAST_ADDRESS_XP,
102    Address: SOCKET_ADDRESS,
103    PrefixOrigin: IP_PREFIX_ORIGIN,
104    SuffixOrigin: IP_SUFFIX_ORIGIN,
105    DadState: IP_DAD_STATE,
106    ValidLifetime: ULONG,
107    PreferredLifetime: ULONG,
108    LeaseLifetime: ULONG,
109}}
110pub type PIP_ADAPTER_UNICAST_ADDRESS_XP = *mut IP_ADAPTER_UNICAST_ADDRESS_XP;
111pub type IP_ADAPTER_UNICAST_ADDRESS = IP_ADAPTER_UNICAST_ADDRESS_LH;
112// pub type IP_ADAPTER_UNICAST_ADDRESS = IP_ADAPTER_UNICAST_ADDRESS_XP;
113pub type PIP_ADAPTER_UNICAST_ADDRESS = *mut IP_ADAPTER_UNICAST_ADDRESS;
114pub const IP_ADAPTER_ADDRESS_DNS_ELIGIBLE: usize = 0x01;
115pub const IP_ADAPTER_ADDRESS_TRANSIENT: usize = 0x02;
116STRUCT!{struct IP_ADAPTER_ANYCAST_ADDRESS_XP_u_s {
117    Length: ULONG,
118    Flags: DWORD,
119}}
120UNION!{union IP_ADAPTER_ANYCAST_ADDRESS_XP_u {
121    [u64; 1],
122    Alignment Alignment_mut: ULONGLONG,
123    s s_mut: IP_ADAPTER_ANYCAST_ADDRESS_XP_u_s,
124}}
125STRUCT!{struct IP_ADAPTER_ANYCAST_ADDRESS_XP {
126    u: IP_ADAPTER_ANYCAST_ADDRESS_XP_u,
127    Next: *mut IP_ADAPTER_ANYCAST_ADDRESS_XP,
128    Address: SOCKET_ADDRESS,
129}}
130pub type PIP_ADAPTER_ANYCAST_ADDRESS_XP = *mut IP_ADAPTER_ANYCAST_ADDRESS_XP;
131pub type IP_ADAPTER_ANYCAST_ADDRESS = IP_ADAPTER_ANYCAST_ADDRESS_XP;
132pub type PIP_ADAPTER_ANYCAST_ADDRESS = *mut IP_ADAPTER_ANYCAST_ADDRESS;
133STRUCT!{struct IP_ADAPTER_MULTICAST_ADDRESS_XP_u_s {
134    Length: ULONG,
135    Flags: DWORD,
136}}
137UNION!{union IP_ADAPTER_MULTICAST_ADDRESS_XP_u {
138    [u64; 1],
139    Alignment Alignment_mut: ULONGLONG,
140    s s_mut: IP_ADAPTER_MULTICAST_ADDRESS_XP_u_s,
141}}
142STRUCT!{struct IP_ADAPTER_MULTICAST_ADDRESS_XP {
143    u: IP_ADAPTER_MULTICAST_ADDRESS_XP_u,
144    Next: *mut IP_ADAPTER_MULTICAST_ADDRESS_XP,
145    Address: SOCKET_ADDRESS,
146}}
147pub type PIP_ADAPTER_MULTICAST_ADDRESS_XP = *mut IP_ADAPTER_MULTICAST_ADDRESS_XP;
148pub type IP_ADAPTER_MULTICAST_ADDRESS = IP_ADAPTER_MULTICAST_ADDRESS_XP;
149pub type PIP_ADAPTER_MULTICAST_ADDRESS = *mut IP_ADAPTER_MULTICAST_ADDRESS_XP;
150STRUCT!{struct IP_ADAPTER_DNS_SERVER_ADDRESS_XP_u_s {
151    Length: ULONG,
152    Reserved: DWORD,
153}}
154UNION!{union IP_ADAPTER_DNS_SERVER_ADDRESS_XP_u {
155    [u64; 1],
156    Alignment Alignment_mut: ULONGLONG,
157    s s_mut: IP_ADAPTER_DNS_SERVER_ADDRESS_XP_u_s,
158}}
159STRUCT!{struct IP_ADAPTER_DNS_SERVER_ADDRESS_XP {
160    u: IP_ADAPTER_DNS_SERVER_ADDRESS_XP_u,
161    Next: *mut IP_ADAPTER_DNS_SERVER_ADDRESS_XP,
162    Address: SOCKET_ADDRESS,
163}}
164pub type PIP_ADAPTER_DNS_SERVER_ADDRESS_XP = *mut IP_ADAPTER_DNS_SERVER_ADDRESS_XP;
165pub type IP_ADAPTER_DNS_SERVER_ADDRESS = IP_ADAPTER_DNS_SERVER_ADDRESS_XP;
166pub type PIP_ADAPTER_DNS_SERVER_ADDRESS = *mut IP_ADAPTER_DNS_SERVER_ADDRESS_XP;
167STRUCT!{struct IP_ADAPTER_WINS_SERVER_ADDRESS_LH_u_s {
168    Length: ULONG,
169    Reserved: DWORD,
170}}
171UNION!{union IP_ADAPTER_WINS_SERVER_ADDRESS_LH_u {
172    [u64; 1],
173    Alignment Alignment_mut: ULONGLONG,
174    s s_mut: IP_ADAPTER_WINS_SERVER_ADDRESS_LH_u_s,
175}}
176STRUCT!{struct IP_ADAPTER_WINS_SERVER_ADDRESS_LH {
177    u: IP_ADAPTER_WINS_SERVER_ADDRESS_LH_u,
178    Next: *mut IP_ADAPTER_WINS_SERVER_ADDRESS_LH,
179    Address: SOCKET_ADDRESS,
180}}
181pub type PIP_ADAPTER_WINS_SERVER_ADDRESS_LH = *mut IP_ADAPTER_WINS_SERVER_ADDRESS_LH;
182pub type IP_ADAPTER_WINS_SERVER_ADDRESS = IP_ADAPTER_WINS_SERVER_ADDRESS_LH;
183pub type PIP_ADAPTER_WINS_SERVER_ADDRESS = *mut IP_ADAPTER_WINS_SERVER_ADDRESS_LH;
184STRUCT!{struct IP_ADAPTER_GATEWAY_ADDRESS_LH_u_s {
185    Length: ULONG,
186    Reserved: DWORD,
187}}
188UNION!{union IP_ADAPTER_GATEWAY_ADDRESS_LH_u {
189    [u64; 1],
190    Alignment Alignment_mut: ULONGLONG,
191    s s_mut: IP_ADAPTER_GATEWAY_ADDRESS_LH_u_s,
192}}
193STRUCT!{struct IP_ADAPTER_GATEWAY_ADDRESS_LH {
194    u: IP_ADAPTER_GATEWAY_ADDRESS_LH_u,
195    Next: *mut IP_ADAPTER_GATEWAY_ADDRESS_LH,
196    Address: SOCKET_ADDRESS,
197}}
198pub type PIP_ADAPTER_GATEWAY_ADDRESS_LH = *mut IP_ADAPTER_GATEWAY_ADDRESS_LH;
199pub type IP_ADAPTER_GATEWAY_ADDRESS = IP_ADAPTER_GATEWAY_ADDRESS_LH;
200pub type PIP_ADAPTER_GATEWAY_ADDRESS = *mut IP_ADAPTER_GATEWAY_ADDRESS_LH;
201STRUCT!{struct IP_ADAPTER_PREFIX_XP_u_s {
202    Length: ULONG,
203    Flags: DWORD,
204}}
205UNION!{union IP_ADAPTER_PREFIX_XP_u {
206    [u64; 1],
207    Alignment Alignment_mut: ULONGLONG,
208    s s_mut: IP_ADAPTER_PREFIX_XP_u_s,
209}}
210STRUCT!{struct IP_ADAPTER_PREFIX_XP {
211    u: IP_ADAPTER_PREFIX_XP_u,
212    Next: *mut IP_ADAPTER_PREFIX_XP,
213    Address: SOCKET_ADDRESS,
214    PrefixLength: ULONG,
215}}
216pub type PIP_ADAPTER_PREFIX_XP = *mut IP_ADAPTER_PREFIX_XP;
217pub type IP_ADAPTER_PREFIX = IP_ADAPTER_PREFIX_XP;
218pub type PIP_ADAPTER_PREFIX = *mut IP_ADAPTER_PREFIX_XP;
219STRUCT!{struct IP_ADAPTER_DNS_SUFFIX {
220    Next: *mut IP_ADAPTER_DNS_SUFFIX,
221    String: [WCHAR; MAX_DNS_SUFFIX_STRING_LENGTH],
222}}
223pub type PIP_ADAPTER_DNS_SUFFIX = *mut IP_ADAPTER_DNS_SUFFIX;
224pub const IP_ADAPTER_DDNS_ENABLED: DWORD = 0x00000001;
225pub const IP_ADAPTER_REGISTER_ADAPTER_SUFFIX: DWORD = 0x00000002;
226pub const IP_ADAPTER_DHCP_ENABLED: DWORD = 0x00000004;
227pub const IP_ADAPTER_RECEIVE_ONLY: DWORD = 0x00000008;
228pub const IP_ADAPTER_NO_MULTICAST: DWORD = 0x00000010;
229pub const IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG: DWORD = 0x00000020;
230pub const IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED: DWORD = 0x00000040;
231pub const IP_ADAPTER_IPV4_ENABLED: DWORD = 0x00000080;
232pub const IP_ADAPTER_IPV6_ENABLED: DWORD = 0x00000100;
233pub const IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG: DWORD = 0x00000200;
234STRUCT!{struct IP_ADAPTER_ADDRESSES_LH_u_s {
235    Length: ULONG,
236    IfIndex: IF_INDEX,
237}}
238UNION!{union IP_ADAPTER_ADDRESSES_LH_u {
239    [u64; 1],
240    Alignment Alignment_mut: ULONGLONG,
241    s s_mut: IP_ADAPTER_ADDRESSES_LH_u_s,
242}}
243STRUCT!{struct IP_ADAPTER_ADDRESSES_LH {
244    u: IP_ADAPTER_ADDRESSES_LH_u,
245    Next: *mut IP_ADAPTER_ADDRESSES_LH,
246    AdapterName: PCHAR,
247    FirstUnicastAddress: PIP_ADAPTER_UNICAST_ADDRESS_LH,
248    FirstAnycastAddress: PIP_ADAPTER_ANYCAST_ADDRESS_XP,
249    FirstMulticastAddress: PIP_ADAPTER_MULTICAST_ADDRESS_XP,
250    FirstDnsServerAddress: PIP_ADAPTER_DNS_SERVER_ADDRESS_XP,
251    DnsSuffix: PWCHAR,
252    Description: PWCHAR,
253    FriendlyName: PWCHAR,
254    PhysicalAddress: [BYTE; MAX_ADAPTER_ADDRESS_LENGTH],
255    PhysicalAddressLength: ULONG,
256    Flags: ULONG,
257    Mtu: ULONG,
258    IfType: IFTYPE,
259    OperStatus: IF_OPER_STATUS,
260    Ipv6IfIndex: IF_INDEX,
261    ZoneIndices: [ULONG; 16],
262    FirstPrefix: PIP_ADAPTER_PREFIX_XP,
263    TransmitLinkSpeed: ULONG64,
264    ReceiveLinkSpeed: ULONG64,
265    FirstWinsServerAddress: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH,
266    FirstGatewayAddress: PIP_ADAPTER_GATEWAY_ADDRESS_LH,
267    Ipv4Metric: ULONG,
268    Ipv6Metric: ULONG,
269    Luid: IF_LUID,
270    Dhcpv4Server: SOCKET_ADDRESS,
271    CompartmentId: NET_IF_COMPARTMENT_ID,
272    NetworkGuid: NET_IF_NETWORK_GUID,
273    ConnectionType: NET_IF_CONNECTION_TYPE,
274    TunnelType: TUNNEL_TYPE,
275    Dhcpv6Server: SOCKET_ADDRESS,
276    Dhcpv6ClientDuid: [BYTE; MAX_DHCPV6_DUID_LENGTH],
277    Dhcpv6ClientDuidLength: ULONG,
278    Dhcpv6Iaid: ULONG,
279    FirstDnsSuffix: PIP_ADAPTER_DNS_SUFFIX,
280}}
281BITFIELD!{IP_ADAPTER_ADDRESSES_LH Flags: ULONG [
282    DdnsEnabled set_DdnsEnabled[0..1],
283    RegisterAdapterSuffix set_RegisterAdapterSuffix[1..2],
284    Dhcpv4Enabled set_Dhcpv4Enabled[2..3],
285    ReceiveOnly set_ReceiveOnly[3..4],
286    NoMulticast set_NoMulticast[4..5],
287    Ipv6OtherStatefulConfig set_Ipv6OtherStatefulConfig[5..6],
288    NetbiosOverTcpipEnabled set_NetbiosOverTcpipEnabled[6..7],
289    Ipv4Enabled set_Ipv4Enabled[7..8],
290    Ipv6Enabled set_Ipv6Enabled[8..9],
291    Ipv6ManagedAddressConfigurationSupported set_Ipv6ManagedAddressConfigurationSupported[9..10],
292]}
293pub type PIP_ADAPTER_ADDRESSES_LH = *mut IP_ADAPTER_ADDRESSES_LH;
294STRUCT!{struct IP_ADAPTER_ADDRESSES_XP_u_s {
295    Length: ULONG,
296    IfIndex: DWORD,
297}}
298UNION!{union IP_ADAPTER_ADDRESSES_XP_u {
299    [u64; 1],
300    Alignment Alignment_mut: ULONGLONG,
301    s s_mut: IP_ADAPTER_ADDRESSES_XP_u_s,
302}}
303STRUCT!{struct IP_ADAPTER_ADDRESSES_XP {
304    u: IP_ADAPTER_ADDRESSES_XP_u,
305    Next: *mut IP_ADAPTER_ADDRESSES_XP,
306    AdapterName: PCHAR,
307    FirstUnicastAddress: PIP_ADAPTER_UNICAST_ADDRESS_XP,
308    FirstAnycastAddress: PIP_ADAPTER_ANYCAST_ADDRESS_XP,
309    FirstMulticastAddress: PIP_ADAPTER_MULTICAST_ADDRESS_XP,
310    FirstDnsServerAddress: PIP_ADAPTER_DNS_SERVER_ADDRESS_XP,
311    DnsSuffix: PWCHAR,
312    Description: PWCHAR,
313    FriendlyName: PWCHAR,
314    PhysicalAddress: [BYTE; MAX_ADAPTER_ADDRESS_LENGTH],
315    PhysicalAddressLength: DWORD,
316    Flags: DWORD,
317    Mtu: DWORD,
318    IfType: DWORD,
319    OperStatus: IF_OPER_STATUS,
320    Ipv6IfIndex: DWORD,
321    ZoneIndices: [DWORD; 16],
322    FirstPrefix: PIP_ADAPTER_PREFIX_XP,
323}}
324pub type PIP_ADAPTER_ADDRESSES_XP = *mut IP_ADAPTER_ADDRESSES_XP;
325pub type IP_ADAPTER_ADDRESSES = IP_ADAPTER_ADDRESSES_LH;
326// pub type IP_ADAPTER_ADDRESSES = IP_ADAPTER_ADDRESSES_XP;
327pub type PIP_ADAPTER_ADDRESSES = *mut IP_ADAPTER_ADDRESSES;
328pub const GAA_FLAG_SKIP_UNICAST: ULONG = 0x0001;
329pub const GAA_FLAG_SKIP_ANYCAST: ULONG = 0x0002;
330pub const GAA_FLAG_SKIP_MULTICAST: ULONG = 0x0004;
331pub const GAA_FLAG_SKIP_DNS_SERVER: ULONG = 0x0008;
332pub const GAA_FLAG_INCLUDE_PREFIX: ULONG = 0x0010;
333pub const GAA_FLAG_SKIP_FRIENDLY_NAME: ULONG = 0x0020;
334pub const GAA_FLAG_INCLUDE_WINS_INFO: ULONG = 0x0040;
335pub const GAA_FLAG_INCLUDE_GATEWAYS: ULONG = 0x0080;
336pub const GAA_FLAG_INCLUDE_ALL_INTERFACES: ULONG = 0x0100;
337pub const GAA_FLAG_INCLUDE_ALL_COMPARTMENTS: ULONG = 0x0200;
338pub const GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER: ULONG = 0x0400;
339STRUCT!{struct IP_PER_ADAPTER_INFO_W2KSP1 {
340    AutoconfigEnabled: UINT,
341    AutoconfigActive: UINT,
342    CurrentDnsServer: PIP_ADDR_STRING,
343    DnsServerList: IP_ADDR_STRING,
344}}
345pub type PIP_PER_ADAPTER_INFO_W2KSP1 = *mut IP_PER_ADAPTER_INFO_W2KSP1;
346pub type IP_PER_ADAPTER_INFO = IP_PER_ADAPTER_INFO_W2KSP1;
347pub type PIP_PER_ADAPTER_INFO = *mut IP_PER_ADAPTER_INFO;
348STRUCT!{struct FIXED_INFO_W2KSP1 {
349    HostName: [CHAR; MAX_HOSTNAME_LEN + 4],
350    DomainName: [CHAR; MAX_DOMAIN_NAME_LEN + 4],
351    CurrentDnsServer: PIP_ADDR_STRING,
352    DnsServerList: IP_ADDR_STRING,
353    NodeType: UINT,
354    ScopeId: [CHAR; MAX_SCOPE_ID_LEN + 4],
355    EnableRouting: UINT,
356    EnableProxy: UINT,
357    EnableDns: UINT,
358}}
359pub type PFIXED_INFO_W2KSP1 = *mut FIXED_INFO_W2KSP1;
360pub type FIXED_INFO = FIXED_INFO_W2KSP1;
361pub type PFIXED_INFO = *mut FIXED_INFO;
362STRUCT!{struct IP_INTERFACE_NAME_INFO_W2KSP1 {
363    Index: ULONG,
364    MediaType: ULONG,
365    ConnectionType: UCHAR,
366    AccessType: UCHAR,
367    DeviceGuid: GUID,
368    InterfaceGuid: GUID,
369}}
370pub type PIP_INTERFACE_NAME_INFO_W2KSP1 = *mut IP_INTERFACE_NAME_INFO_W2KSP1;
371pub type IP_INTERFACE_NAME_INFO = IP_INTERFACE_NAME_INFO_W2KSP1;
372pub type PIP_INTERFACE_NAME_INFO = *mut IP_INTERFACE_NAME_INFO;