OID_GEN_NETWORK_LAYER_ADDRESSES (Compact 2013)

3/26/2014

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

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 previous 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 note them before passing them on to the underlying miniport driver. An underlying miniport driver, especially a 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 toward 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. This includes 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

See Also

Reference

General Operational OIDs
NDIS_OID_REQUEST
NdisOidRequest
NdisOpenAdapterEx