Why multicast address failed on miniport driver ?

I am trying to pass multicast address HLK test on my miniport driver . I didn’t get why this error failed during this test case .

The HLK log is giving clue like this :

Add/Delete a multicast address multiple times - 0

ClOpen::AddMulticastAddress
Add address 01-02-03-04-05-06 to the multicast list on the Test open
NdisRequest for OID_802_3_MULTICAST_LIST of type SetInformation failed with status = NDIS_STATUS_MULTICAST_FULL
ClOpen::AddMulticastAddress: Adding Multicast address failed on the Device Test open Message: NDIS_STATUS_MULTICAST_FULL length 6
50008 AddMulticastAddress failed with status

Query Multicast address list to validate that Add was successfull.

Delete Multicast Address.
ClOpen::RemoveMulticastAddress
Remove address 01-02-03-04-05-06 to the multicast list on the Test open
NdisRequest for OID_802_3_MULTICAST_LIST of type SetInformation failed with status = NDIS_STATUS_MULTICAST_FULL
ClOpen::RemoveMulticastAddress: Removing Multicast address failed on the Device Test open Message: NDIS_STATUS_MULTICAST_FULL length 6
50008 RemoveMulticastAddress failed with status

Query Multicast address list to validate that Delete was successfull.
50013 Multicast list should be empty


This is my set & query implementation of OID_802_3_MULTICAST_LIST on miniport driver :

case OID_802_3_MAXIMUM_LIST_SIZE:
Information = &m_ulMaximumListSize; //m_ulMaximumListSize = 32
InformationLength = sizeof(m_ulMaximumListSize);
break;

for query :

case OID_802_3_MULTICAST_LIST:
status = NDIS_STATUS_NOT_SUPPORTED;
break;

for set request :

case OID_802_3_MULTICAST_LIST:
if ((OidRequest->DATA.SET_INFORMATION.InformationBufferLength % 6 ) != 0) {
OidRequest->DATA.SET_INFORMATION.BytesNeeded = 0;
OidRequest->DATA.SET_INFORMATION.BytesRead = 0;
status = NDIS_STATUS_INVALID_LENGTH;
}
else{
status = NDIS_STATUS_MULTICAST_FULL;
}
break;

case OID_802_3_ADD_MULTICAST_ADDRESS:
case OID_802_3_DELETE_MULTICAST_ADDRESS:
OidRequest->DATA.SET_INFORMATION.BytesNeeded = 0;
status = NDIS_STATUS_NOT_SUPPORTED;
break;

Any suggestions ? Anything missing in code ?
Thanks

xxxxx@gmail.com wrote:

I am trying to pass multicast address HLK test on my miniport driver . I didn’t get why this error failed during this test case .

I don’t understand how you can be confused:

case OID_802_3_MULTICAST_LIST:
if ((OidRequest->DATA.SET_INFORMATION.InformationBufferLength % 6 ) != 0) {
OidRequest->DATA.SET_INFORMATION.BytesNeeded = 0;
OidRequest->DATA.SET_INFORMATION.BytesRead = 0;
status = NDIS_STATUS_INVALID_LENGTH;
}
else{
status = NDIS_STATUS_MULTICAST_FULL;
}
break;

If the request is not a multiple of 6, you return INVALID_LENGTH. If it
is a multiple of 6, as the log said, you return MULTICAST_FULL. There
is no success path here.

Are you trying to support multicast, or are you trying NOT to support
multicast?


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

Yeah correct . But after i handled this case also , i am facing same error :

This is implementation :

==================================================

m_ulMaximumListSize = 32 //maximum multicast list , mac address length = 6

switch (OidRequest->DATA.SET_INFORMATION.Oid) {

case OID_802_3_MULTICAST_LIST:

OidRequest->DATA.SET_INFORMATION.BytesNeeded = 6;
OidRequest->DATA.SET_INFORMATION.BytesRead = OidRequest->DATA.SET_INFORMATION.InformationBufferLength ;

do{
if(OidRequest->DATA.SET_INFORMATION.InformationBufferLength % 6){
status = NDIS_STATUS_INVALID_LENGTH;
break;
}
if(OidRequest->DATA.SET_INFORMATION.InformationBufferLength > (m_ulMaximumListSize *6)){
status = NDIS_STATUS_MULTICAST_FULL;
OidRequest->DATA.SET_INFORMATION.BytesNeeded = m_ulMaximumListSize *6;
break;
}
//setting multicast address list
NdisZeroMemory(m_ulMcList,m_ulMaximumListSize *6);
NdisMoveMemory(m_ulMcList,OidRequest->DATA.SET_INFORMATION.InformationBuffer,OidRequest->DATA.SET_INFORMATION.InformationBufferLength);
m_ulMclistSize = OidRequest->DATA.SET_INFORMATION.InformationBufferLength/6;

}while(FALSE);

===================================================

Still same error :

ClOpen::AddMulticastAddress Add address 01-02-03-04-05-06 to the multicast list on the Test open NdisRequest for OID_802_3_MULTICAST_LIST of type SetInformation failed with status = NDIS_STATUS_MULTICAST_FULL ClOpen::AddMulticastAddress: Adding Multicast address failed on the Device Test open Message: NDIS_STATUS_MULTICAST_FULL length 6 50008 AddMulticastAddress failed with status Query Multicast address list to validate that Add was successful.

Any suggestions ? I think my implementation is correct for OID_802_3_MULTICAST_LIST .