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 .