OID_GEN_NETWORK_LAYER_ADDRESSES

As a set, the OID_GEN_NETWORK_LAYER_ADDRESSES OID notifies underlying miniport driver and other layered drivers about the list of network-layer addresses that are associated with bound instances.

Version Information

Windows Vista and later versions of Windows
Supported.

NDIS 6.0 and later miniport drivers
Optional.

NDIS 5.1 miniport drivers
Optional.

Windows XP
Supported.

NDIS 5.1 miniport drivers
Optional.

Remarks

A bound instance is the binding between the calling transport and a driver set up by a call to NdisOpenAdapterEx. Transports use TRANSPORT_ADDRESS and TA_ADDRESS structures to notify underlying miniport drivers and other layered drivers about the list of network-layer addresses. Miniport drivers and other layered drivers use compatible NETWORK_ADDRESS_LIST and NETWORK_ADDRESS structures, defined as follows, to set the list of network-layer addresses on a bound interface.

typedef struct _NETWORK_ADDRESS_LIST {
  LONG  AddressCount; 
  USHORT  AddressType; 
  NETWORK_ADDRESS  Address[1]; 
} NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;

The members of this structure contain the following information:

AddressCount
Specifies the number of network-layer addresses listed in the array in the Address member.

AddressType
Specifies the protocol type that sends this OID. This member is only valid if the AddressCount member is set to zero. The AddressCount member is set to zero to notify a miniport driver or other layered driver to clear the list of network-layer addresses on a bound interface. The protocol can be one of the following values:

NDIS_PROTOCOL_ID_DEFAULT
Default protocol

NDIS_PROTOCOL_ID_TCP_IP
TCP/IP protocol

NDIS_PROTOCOL_ID_IPX
NetWare IPX protocol

NDIS_PROTOCOL_ID_NBF
NetBIOS protocol

Address
Array of network-layer addresses of type NETWORK_ADDRESS. The AddressCount member specifies the number of elements in this array.

typedef struct _NETWORK_ADDRESS {
  USHORT  AddressLength; 
  USHORT  AddressType; 
  UCHAR   Address[1]; 
} NETWORK_ADDRESS, *PNETWORK_ADDRESS;

The members of this structure contain the following information:

AddressLength
Specifies the size, in bytes, of this network-layer address. The Address member contains the array of bytes that specify this address.

AddressType
Specifies the protocol type that sends this OID and this network-layer address. This member is only valid if the AddressCount member in the NETWORK_ADDRESS_LIST structure is set to a nonzero value. The AddressCount member in NETWORK_ADDRESS_LIST is set to a nonzero value to notify a miniport driver or other layered driver to change the list of network-layer addresses on a bound interface. Protocol types are defined in the preceding list.

Address
Array of bytes that specify this network-layer address. The AddressLength member specifies the number of bytes in this array.

The transport can call the NdisOidRequest function and can pass an NDIS_OID_REQUEST structure that is filled with the OID_GEN_NETWORK_LAYER_ADDRESSES code. This call notifies a bound instance of a change in the addresses that are associated with that instance. In this call, the transport also passes the bound instance in the NdisBindingHandle parameter. The bound instance is the binding set up between the transport and the underlying miniport driver or other layered driver. For this call, the transport should fill the InformationBuffer member of NDIS_OID_REQUEST with a pointer to a TRANSPORT_ADDRESS structure. TRANSPORT_ADDRESS corresponds to a NETWORK_ADDRESS_LIST structure and should contain the list of network-layer addresses.

Suppose a transport passes addresses through an intermediate driver down to an underlying miniport driver. If the intermediate driver also requires the addresses, it should take note of them before passing them on to the underlying miniport driver. An underlying miniport driver, especially an old driver, can return a status value of NDIS_STATUS_NOT_SUPPORTED or NDIS_STATUS_SUCCESS. The underlying miniport driver propagates the status of the operation back up towards the transport. If the intermediate driver must continue receiving address notifications, and if it is necessary, the intermediate driver should change the status to NDIS_STATUS_SUCCESS.Otherwise, the transport might interpret NDIS_STATUS_NOT_SUPPORTED as an indication that the underlying miniport driver does not require that the transport issue additional address updates. If NDIS_STATUS_SUCCESS is returned, transports are obligated to continue notifying underlying drivers of any change in associated addresses, including addition and deletion of addresses.

A protocol can set the AddressCount member of TRANSPORT_ADDRESS to zero to notify a miniport driver or other layered driver to clear the list of network-layer addresses on a bound interface. If AddressCount is set to zero, the AddressType member in NETWORK_ADDRESS_LIST is valid and the AddressType members in NETWORK_ADDRESS structures are not valid. On the other hand, a protocol can set AddressCount to a nonzero value to notify a miniport driver or other layered driver to change the list of network-layer addresses on a bound interface. In this case, the AddressType member in NETWORK_ADDRESS_LIST is not valid and the AddressType members in NETWORK_ADDRESS structures are valid.

Requirements

Header

Ntddndis.h (include Ndis.h)

See also

NDIS_OID_REQUEST

NdisOidRequest

NdisOpenAdapterEx