As a set request, NDIS and overlying protocol drivers use the OID_802_3_ADD_MULTICAST_ADDRESS OID request to add an 802.3 multicast address to the multicast address list of a miniport adapter. The multicast address is an array of 6 bytes. Adding an address enables that address to receive multicast packets.
The InformationBuffer member of the NDIS_OID_REQUEST structure contains the 6-byte address to be added to the multicast address list.
The OID_802_3_ADD_MULTICAST_ADDRESS OID request can add only one address. To add more than one address, the overlying driver must issue multiple OID_802_3_ADD_MULTICAST_ADDRESS OID requests.
NDIS miniport drivers do not receive this OID request directly. Instead, NDIS consolidates each sequence of OID_802_3_ADD_MULTICAST_ADDRESS and OID_802_3_DELETE_MULTICAST_ADDRESS OID requests into a single OID_802_3_MULTICAST_LIST OID request, which it sends to the miniport driver.
To receive multicast packets, the overlying driver must use the OID_GEN_CURRENT_PACKET_FILTER OID to set the packet filter NDIS_PACKET_TYPE_MULTICAST flag.
The miniport driver can set a limit on the number of multicast addresses that the multicast address list can contain. To specify the maximum number of multicast addresses, the miniport driver sets the MaxMulticastListSize member of the NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES structure that it passes to the NdisMSetMiniportAttributes function. For miniport drivers that are based on NDIS versions before NDIS 6.0, NDIS queries the maximum number of multicast addresses by sending an OID_802_3_MAXIMUM_LIST_SIZE OID request. NDIS returns NDIS_STATUS_MULTICAST_FULL if an OID_802_3_ADD_MULTICAST_ADDRESS request exceeds this limit.
To delete a previously added multicast address, make a set request with the OID_802_3_DELETE_MULTICAST_ADDRESS OID. The overlying driver can add a given multicast address multiple times. If NDIS succeeds the first add request for a given multicast address, NDIS will succeed all subsequent add requests for that address. To delete a multicast address that was added more than once, the overlying driver must delete the address the same number of times that it added the address.
|Ntddndis.h (include Ndis.h)|