none
Why multicast address failed on miniport driver with NDIS_STATUS_MULTICAST_FULL during HLK Test ? RRS feed

  • Question

  • I am trying to pass NDISTest 6.5 - 2 machine - MultiCast Address HLK Test . During the test , it goes to failed state . I analyzed the log with HLK studio .

    Log :

    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 

    This test is got failed with NDIS_STATUS_MULTICAST_FULL . But i don't know why this got failed with NDIS_STATUS_MULTICAST_FULL . I am handling this multicast address properly .

    This is my code :

    #define VELAN_MAX_MCAST_LIST 32
    typedef UCHAR MUX_MAC_ADDRESS[6];
    MUX_MAC_ADDRESS McastAddrs[VELAN_MAX_MCAST_LIST];
    ULONG McastAddrCount;
    
    switch (OidRequest->DATA.SET_INFORMATION.Oid) { 
    
     case OID_802_3_MULTICAST_LIST:     
        
     OidRequest->DATA.SET_INFORMATION.BytesNeeded = sizeof(MUX_MAC_ADDRESS);    
    
     OidRequest->DATA.SET_INFORMATION.BytesRead =OidRequest->DATA.SET_INFORMATION.InformationBufferLength ;     
    
    do{ 
            if(OidRequest->DATA.SET_INFORMATION.InformationBufferLength % sizeof(MUX_MAC_ADDRESS))        {
                 status = NDIS_STATUS_INVALID_LENGTH;  
                 break;         
          }
         if(OidRequest->DATA.SET_INFORMATION.InformationBufferLength > (VELAN_MAX_MCAST_LIST*sizeof(MUX_MAC_ADDRESS)))        { 
                    
                 status = NDIS_STATUS_MULTICAST_FULL;                
                OidRequest->DATA.SET_INFORMATION.BytesNeeded = VELAN_MAX_MCAST_LIST*sizeof(MUX_MAC_ADDRESS);         
                break;         
     }                 
    //setting multicast address list 
            NdisZeroMemory(McastAddrs,VELAN_MAX_MCAST_LIST*sizeof(MUX_MAC_ADDRESS));         
            NdisMoveMemory(McastAddrs,OidRequest->DATA.SET_INFORMATION.InformationBuffer,OidR equest->DATA.SET_INFORMATION.InformationBufferLength);         
           McastAddrCount=OidRequest->DATA.SET_INFORMATION.InformationBufferLength/sizeof(MUX_MAC_ADDRESS);         
    
    }while(FALSE); 

    Then why test always failed with NDIS_STATUS_MULTICAST_FULL error ? Any coding mistake ? Any suggestions ?

    Thanks




    • Edited by vkp123 Friday, February 3, 2017 6:38 AM code edit
    Friday, February 3, 2017 6:36 AM

All replies

  • Any suggestions ?
    Saturday, February 4, 2017 7:14 AM
  • You're limiting the number of allowed multicast addresses. You need to provide a handler for OID_802_3_MAXIMUM_LIST_SIZE to make the OS aware of your internal limit. 


    • Edited by -IgorC- Sunday, February 5, 2017 7:50 AM
    Sunday, February 5, 2017 7:50 AM
  • @-Igorc-  thanks for your suggestions . I am handling this OID . OID_802_3_MULTICAST_LIST with 32 . But  i am getting still same error . Any suggestions ?  

    MAX_SIZE = 32 ; 
    case OID_802_3_MAXIMUM_LIST_SIZE:		
     Information = (PVOID)MAX_SIZE;		
     InformationLength = sizeof(Information);

    Monday, February 27, 2017 7:52 AM