3.3.5.15.11 Handling a Query Network Interface Request

This section applies only to servers that implement the SMB 3.x dialect family.

When the server receives a request with an SMB2 header with a Command value equal to SMB2 IOCTL and a CtlCode of FSCTL_QUERY_NETWORK_INTERFACE_INFO, message handling proceeds as follows:

If Connection.Dialect does not belong to the SMB 3.x dialect family or Connection.ServerCapabilities does not include SMB2_GLOBAL_CAP_MULTI_CHANNEL, the server MAY fail the request with STATUS_NOT_SUPPORTED.

Otherwise, the server MUST enumerate the local network interfaces in an implementation-specific manner. For each IP address in each network interface, the server MUST construct a NETWORK_INTERFACE_INFO structure as specified in section 2.2.32.5, with the following values:

  • The server MUST NOT include the IP address for a network interface with IfIndex equal to zero.

  • IfIndex, Capability, and LinkSpeed MUST be set in an implementation-specific manner.

  • The Family field in SockAddr_Storage MUST be set based on the IP address format. The Buffer field in SockAddr_Storage MUST be set as specified in section 2.2.32.5.1.

If a network interface has multiple IP addresses, IfIndex MUST be the same in all NETWORK_INTERFACE_INFO structures for those IP addresses.

The server MUST construct an SMB2 IOCTL Response by following the syntax specified in section 2.2.32, with the exception of the following values:

  • The CtlCode field MUST be set to FSCTL_QUERY_NETWORK_INTERFACE_INFO.

  • The FileId field MUST be set to { 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF }.

  • InputOffset SHOULD be set to the offset, in bytes, from the beginning of the SMB2 header to the Buffer[] field of the response.

  • InputCount SHOULD be set to zero.

  • OutputOffset MUST be set to InputOffset + InputCount, rounded up to a multiple of 8.

  • OutputCount MUST be set to the size of the NETWORK_INTERFACE_INFO that was previously constructed.

  • Flags MUST be set to zero.

  • The server MUST copy the constructed array of NETWORK_INTERFACE_INFO structures into the Buffer field at the OutputOffset that was previously computed.

The response MUST be sent to the client.