コード例 #1
0
ANSC_STATUS
CosaDmlEthPortGetStats
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulInstanceNumber,
        PCOSA_DML_ETH_STATS         pStats
    )
{
    AnscTraceFlow(("%s...\n", __FUNCTION__));

    if (!pStats)
        return ANSC_STATUS_FAILURE;

    _ansc_memset(pStats, 0, sizeof(COSA_DML_ETH_STATS));
    
    if (ulInstanceNumber == 1)
    {
        pStats->BytesSent = 11;
    }
    else if (ulInstanceNumber == 2)
    {
        pStats->BytesSent = 22;
    }
    else
        return ANSC_STATUS_FAILURE;

    return ANSC_STATUS_SUCCESS;
}
コード例 #2
0
ANSC_STATUS
CosaDmlEthPortGetCfg
    (
        ANSC_HANDLE                 hContext,
        PCOSA_DML_ETH_PORT_CFG      pCfg
    )
{
    AnscTraceFlow(("%s...\n", __FUNCTION__));

    if (!pCfg)
        return ANSC_STATUS_FAILURE;

    if (pCfg->InstanceNumber == 1)
    {
        AnscCopyMemory(pCfg, &g_EthPortFull1.Cfg, sizeof(COSA_DML_ETH_PORT_CFG));
    }
    else if (pCfg->InstanceNumber == 2)
    {
        AnscCopyMemory(pCfg, &g_EthPortFull2.Cfg, sizeof(COSA_DML_ETH_PORT_CFG));
    }
    else
        return ANSC_STATUS_FAILURE;

    return ANSC_STATUS_SUCCESS;
}
コード例 #3
0
ANSC_STATUS
CosaDmlEthPortGetDinfo
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulInstanceNumber,
        PCOSA_DML_ETH_PORT_DINFO    pInfo
    )
{
    AnscTraceFlow(("%s...\n", __FUNCTION__));

    if (!pInfo)
        return ANSC_STATUS_FAILURE;

    _ansc_memset(pInfo, 0, sizeof(COSA_DML_ETH_PORT_DINFO));
    
    if (ulInstanceNumber == 1)
    {
        AnscCopyMemory(pInfo, &g_EthPortFull1.DynamicInfo, sizeof(COSA_DML_ETH_PORT_DINFO));
        pInfo->Status = COSA_DML_IF_STATUS_Up;
    }
    else if (ulInstanceNumber == 2)
    {
        AnscCopyMemory(pInfo, &g_EthPortFull2.DynamicInfo, sizeof(COSA_DML_ETH_PORT_DINFO));
        pInfo->Status = COSA_DML_IF_STATUS_Up;
    }
    else
        return ANSC_STATUS_FAILURE;
    
    return ANSC_STATUS_SUCCESS;
}
コード例 #4
0
ANSC_STATUS
CosaDmlEthPortGetEntry
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIndex,
        PCOSA_DML_ETH_PORT_FULL     pEntry
    )
{
    AnscTraceFlow(("%s...\n", __FUNCTION__));

    if (pEntry)
        _ansc_memset(pEntry, 0, sizeof(COSA_DML_ETH_PORT_FULL));
    else
        return ANSC_STATUS_FAILURE;
    
    if (ulIndex == 0)
    {
        AnscCopyMemory(pEntry, &g_EthPortFull1, sizeof(COSA_DML_ETH_PORT_FULL));
    }
    else if (ulIndex == 1)
    {
        AnscCopyMemory(pEntry, &g_EthPortFull2, sizeof(COSA_DML_ETH_PORT_FULL));
    }
    else
    {
        return ANSC_STATUS_FAILURE;
    }

    return ANSC_STATUS_SUCCESS;
}
コード例 #5
0
ULONG
CosaDmlEthPortGetNumberOfEntries
    (
        ANSC_HANDLE                 hContext
    )
{  
    AnscTraceFlow(("%s...\n", __FUNCTION__));

    return ETH_INT_COUNT;
}
コード例 #6
0
ANSC_STATUS
CosaDmlEthPortSetValues
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIndex,
        ULONG                       ulInstanceNumber,
        char*                       pAlias
    )
{
    AnscTraceFlow(("%s...\n", __FUNCTION__));

    return ANSC_STATUS_SUCCESS;
}
コード例 #7
0
ANSC_STATUS
BbhmDiagipStartDiag
    (
        ANSC_HANDLE                 hThisObject
    )
{
    ANSC_STATUS                     returnStatus        = ANSC_STATUS_SUCCESS;
    PBBHM_DIAG_IP_PING_OBJECT       pMyObject           = (PBBHM_DIAG_IP_PING_OBJECT  )hThisObject;
    PDSLH_PING_INFO                 pDiagInfo           = (PDSLH_PING_INFO)pMyObject->hDslhDiagInfo;

    if ( pMyObject->CheckCanStart((ANSC_HANDLE)pMyObject) )
    {
        AnscTraceFlow(("BbhmDiagipStartDiag -- enter...\n"));

        pMyObject->SetEnv(pMyObject);
        pMyObject->ResetProperty((ANSC_HANDLE)pMyObject);

        /* TODO set source interface name here */
        pMyObject->SetSrcIp((ANSC_HANDLE)pMyObject, pDiagInfo->IfAddrName);

        if ( pMyObject->SetDstIp((ANSC_HANDLE)pMyObject, pDiagInfo->Host) == ANSC_STATUS_SUCCESS)
        {
            pMyObject->SetNumPkts((ANSC_HANDLE)pMyObject, pDiagInfo->NumberOfRepetitions);
            pMyObject->SetPktSize((ANSC_HANDLE)pMyObject, pDiagInfo->DataBlockSize);
            pMyObject->SetTimeOut((ANSC_HANDLE)pMyObject, pDiagInfo->Timeout);

            pMyObject->Open(pMyObject);

            if ( pMyObject->hSendBuffer )
            {
                AnscFreeMemory(pMyObject->hSendBuffer);
                pMyObject->hSendBuffer = NULL;
            }

            pMyObject->hSendBuffer = (PCHAR)AnscAllocateMemory(pDiagInfo->DataBlockSize + sizeof(ICMPV4_HEADER));

            if ( !pMyObject->hSendBuffer )
            {
                return  ANSC_STATUS_RESOURCES;
            }

            returnStatus =
                pMyObject->SetControl
                    (
                        (ANSC_HANDLE)pMyObject,
                        BBHM_IP_PING_CONTROL_START
                    );

            if ( returnStatus == ANSC_STATUS_SUCCESS )
            {
                BbhmDiageoStartDiag((ANSC_HANDLE)pMyObject);
            }
            else
            {
                return returnStatus;
            }
        }
        else
        {
            pDiagInfo->DiagnosticState = DSLH_DIAG_STATE_TYPE_PING_Error_HostName;
        }

        return ANSC_STATUS_SUCCESS;
    }
    else
    {
        AnscTraceFlow(("BbhmDiagipStartDiag -- query task is running...\n"));

        return  ANSC_STATUS_PENDING;
    }
}
コード例 #8
0
ULONG
AnscCryptoHmacSha256Digest
    (
        PVOID                       buffer,
        ULONG                       size,
        PANSC_CRYPTO_HASH           hash,
        PANSC_CRYPTO_KEY            key
    )
{
    ULONG                           i                                    = 0;
    UCHAR                           innerPadding[ANSC_SHA256_BLOCK_SIZE] = {0};
    UCHAR                           outerPadding[ANSC_SHA256_BLOCK_SIZE] = {0};
    UCHAR                           HMACKey[ANSC_SHA256_BLOCK_SIZE]      = {0};
    UCHAR                           tempBuffer[ANSC_SHA256_OUTPUT_SIZE]  = {0};
    SHA256_CTX                      context;

    AnscTraceFlow
        ((
            "%s -- size = %d, buffer = %s, key = %02X.%02X.%02X.%02X.%02X.%02X..., hash length = %d, key length = %d, block size %d, output size %d\n", 
            __FUNCTION__,
            size,
            (char*)buffer,
            key->Value[0][0], key->Value[0][1], key->Value[0][2],
            key->Value[0][3], key->Value[0][4], key->Value[0][5],
            hash->Length,
            key->Length,
            ANSC_SHA256_BLOCK_SIZE,
            ANSC_SHA256_OUTPUT_SIZE
        ));

    /*
     * if the key is longer than the block size of hash function, we have to reset it to the output size;
     * otherwise, we have to pad zeros to the end of the key
     */
    if ( key->Length > ANSC_SHA256_BLOCK_SIZE )
    {
        SHA256_Init  (&context);
        SHA256_Update(&context, key->Value[0], key->Length);
        SHA256_Final (HMACKey,  &context);
    }
    else
    {
        for ( i = 0; i < key->Length; i++ )
        {
            HMACKey[i] = key->Value[0][i];
        }
    }

    /*
     * perform the XOR operation between key and paddings
     */
    AnscCopyMemory(innerPadding, HMACKey, ANSC_SHA256_BLOCK_SIZE);
    AnscCopyMemory(outerPadding, HMACKey, ANSC_SHA256_BLOCK_SIZE);

    for ( i = 0; i < ANSC_SHA256_BLOCK_SIZE; i++ )
    {
        innerPadding[i] ^= ANSC_HMAC_INNER_PADDING_UNIT;
        outerPadding[i] ^= ANSC_HMAC_OUTER_PADDING_UNIT;
    }

    /*
     * perform inner SHA
     */
    SHA256_Init  (&context);
    SHA256_Update(&context,    innerPadding,   ANSC_SHA256_BLOCK_SIZE);
    SHA256_Update(&context,    (PUCHAR)buffer, size);
    SHA256_Final (tempBuffer, &context);

    /*
     * perform outer SHA
     */
    SHA256_Init  (&context);
    SHA256_Update(&context,    outerPadding, ANSC_SHA256_BLOCK_SIZE);
    SHA256_Update(&context,    tempBuffer,  ANSC_SHA256_OUTPUT_SIZE);
    SHA256_Final (hash->Value, &context);

    /*
     * let's make sure our output size is bigger than the requirement; otherwise, we should pad zeros to the end
     * of the hash result data
     */
    if ( ANSC_SHA256_OUTPUT_SIZE < hash->Length )
    {
        AnscZeroMemory(&hash->Value[ANSC_SHA256_OUTPUT_SIZE], hash->Length - ANSC_SHA256_OUTPUT_SIZE);
    }

    /*
     * return control to caller
     */
    return  hash->Length;
}
コード例 #9
0
ANSC_STATUS
BbhmDiageoResultQueryTask
    (
        ANSC_HANDLE                 hThisObject
    )
{
    ANSC_STATUS                     returnStatus        = ANSC_STATUS_SUCCESS;
    PBBHM_DIAG_EXEC_OBJECT          pMyObject           = (PBBHM_DIAG_EXEC_OBJECT     )hThisObject;
    PDSLH_DIAG_INFO_BASE            pDiagInfo           = NULL;
    BOOLEAN                         bQueryDone          = FALSE;

    AnscTraceFlow(("BbhmDiageoResultQueryTask ...\n"));

    do
    {
        returnStatus = pMyObject->RetrieveResult((ANSC_HANDLE)pMyObject);

        if ( returnStatus == ANSC_STATUS_SUCCESS )
        {
            pDiagInfo  = (PDSLH_DIAG_INFO_BASE)pMyObject->hDslhDiagInfo;
            bQueryDone = TRUE;

            if ( (pDiagInfo->DiagnosticState != DSLH_DIAG_STATE_TYPE_Inprogress)
                  && (pDiagInfo->DiagnosticState != DSLH_DIAG_STATE_TYPE_Requested) )
            {
                pMyObject->ResultTimestamp = AnscGetTickInSeconds();
                break;
            }
        }
        else
        {
            /* internal error occurs, quit immediatelly */
            break;
        }

        AnscWaitEvent(&pMyObject->ResultQueryEvent, 1000);
    }
    while ( pMyObject->bResultQueryRunning );

    if ( TRUE/*pDiagInfo->RequestType == DSLH_DIAGNOSTIC_REQUEST_TYPE_Acs*/ )
    {
        /* Always notify the initiator */
        CcspTraceInfo(("BbhmDiageoResultQueryTask -- notify initiator.....\n"));

        /* send out the notification */
        if ( ANSC_STATUS_SUCCESS != CosaSendDiagCompleteSignal() )
        {
            AnscTraceWarning(("Failed to send event for diagnostics completion.\n"));
        }
    }

    AnscAcquireLock(&pMyObject->AccessLock);

    AnscTraceFlow(("BbhmDiageoResultQueryTask -- quiting...\n"));

    /*
     *  stop the diagnostic process
     */
    pMyObject->bResultQueryRunning  = FALSE;

    if ( !bQueryDone )
    {
        pMyObject->StopDiag((ANSC_HANDLE)pMyObject);
    }

    AnscSetEvent(&pMyObject->ResultQueryExitEvent);

    AnscReleaseLock(&pMyObject->AccessLock);

    AnscTraceFlow(("BbhmDiageoStartDiag -- exit...\n"));

    return  ANSC_STATUS_SUCCESS;
}
コード例 #10
0
ANSC_STATUS
BbhmDiagnsStartDiag
    (
        ANSC_HANDLE                 hThisObject
    )
{
    ANSC_STATUS                     returnStatus        = ANSC_STATUS_SUCCESS;
    PBBHM_DIAG_NS_LOOKUP_OBJECT     pMyObject           = (PBBHM_DIAG_NS_LOOKUP_OBJECT)hThisObject;
    PDSLH_NSLOOKUP_INFO             pDiagInfo           = (PDSLH_NSLOOKUP_INFO)pMyObject->hDslhDiagInfo;
    PBBHM_NS_LOOKUP_PROPERTY        pProperty           = (PBBHM_NS_LOOKUP_PROPERTY   )&pMyObject->Property;

    if ( pDiagInfo->bForced != FALSE )
    {
        if ( !(pMyObject->CheckCanStart((ANSC_HANDLE)pMyObject)))
        {
            returnStatus = pMyObject->SetControl((ANSC_HANDLE)pMyObject, BBHM_NS_LOOKUP_CONTROL_STOP);
        }
        pMyObject->ResetProperty    ((ANSC_HANDLE)pMyObject);

        if ( pMyObject->SetDstIp    ((ANSC_HANDLE)pMyObject, pDiagInfo->DNSServer) == ANSC_STATUS_SUCCESS)
        {
            pMyObject->SetNumPkts   ((ANSC_HANDLE)pMyObject, pDiagInfo->NumberOfRepetitions);
            pMyObject->SetSrcIp     ((ANSC_HANDLE)pMyObject, pDiagInfo->IfAddr );
            pMyObject->SetTimeOut   ((ANSC_HANDLE)pMyObject, pDiagInfo->Timeout);

            pMyObject->Open         (pMyObject);
            pMyObject->SetControl   ((ANSC_HANDLE)pMyObject, BBHM_NS_LOOKUP_CONTROL_START);
            BbhmDiageoStartDiag     ((ANSC_HANDLE)pMyObject);
        }
        else
        {
            pDiagInfo->DiagnosticState = DSLH_DIAG_STATE_TYPE_Error_NSLookup_DNSServer;
        }
        return ANSC_STATUS_SUCCESS;
    }
    else
    {
        if ( pMyObject->CheckCanStart   ((ANSC_HANDLE)pMyObject) )
        {
            pMyObject->ResetProperty    ((ANSC_HANDLE)pMyObject);

            if ( pMyObject->SetDstIp    ((ANSC_HANDLE)pMyObject, pDiagInfo->DNSServer) == ANSC_STATUS_SUCCESS)
            {
                pMyObject->SetNumPkts   ((ANSC_HANDLE)pMyObject, pDiagInfo->NumberOfRepetitions);
                pMyObject->SetSrcIp     ((ANSC_HANDLE)pMyObject, pDiagInfo->IfAddr );
                pMyObject->SetTimeOut   ((ANSC_HANDLE)pMyObject, pDiagInfo->Timeout);

                pMyObject->Open         ((ANSC_HANDLE)pMyObject);
                pMyObject->SetControl   ((ANSC_HANDLE)pMyObject, BBHM_NS_LOOKUP_CONTROL_START);
                BbhmDiageoStartDiag     ((ANSC_HANDLE)pMyObject);
            }
            else
            {
                pDiagInfo->DiagnosticState = DSLH_DIAG_STATE_TYPE_Error_NSLookup_DNSServer;
            }
            return ANSC_STATUS_SUCCESS;
        }
        else
        {
            AnscTraceFlow(("BbhmDiagnsStartDiag -- query task is already running...\n"));

            return  ANSC_STATUS_PENDING;
        }
    }
}
コード例 #11
0
/**********************************************************************  

    caller:     owner of this object 

    prototype: 

        ULONG
        X_CISCO_COM_MultiLAN_GetParamStringValue
            (
                ANSC_HANDLE                 hInsContext,
                char*                       ParamName,
                char*                       pValue,
                ULONG*                      pUlSize
            );

    description:

        This function is called to retrieve string parameter value; 

    argument:   ANSC_HANDLE                 hInsContext,
                The instance handle;

                char*                       ParamName,
                The parameter name;

                char*                       pValue,
                The string value buffer;

                ULONG*                      pUlSize
                The buffer of length of string value;
                Usually size of 1023 will be used.
                If it's not big enough, put required size here and return 1;

    return:     0 if succeeded;
                1 if short of buffer size; (*pUlSize = required size)
                -1 if not supported.

**********************************************************************/
ULONG
X_CISCO_COM_MultiLAN_GetParamStringValue
    (
        ANSC_HANDLE                 hInsContext,
        char*                       ParamName,
        char*                       pValue,
        ULONG*                      pUlSize
    )
{
    ANSC_STATUS                     returnStatus;
    PCOSA_BASE_OBJECT               pMyObject    = (PCOSA_BASE_OBJECT)g_pCosaBEManager->hMultiLan;

    AnscTraceFlow(("%s -- %s, buffer size %ul...\n", __FUNCTION__, ParamName, *pUlSize));

    /* check the parameter name and return the corresponding value */
    if( AnscEqualString(ParamName, "PrimayLANIPInterface", TRUE) )
    {
        returnStatus = CosaDmlMlanGetPrimaryLanIpIf((ANSC_HANDLE)pMyObject, pValue, pUlSize);
    }
    else if( AnscEqualString(ParamName, "HomeSecurityIPInterface", TRUE) )
    {
        returnStatus = CosaDmlMlanGetHomeSecurityIpIf((ANSC_HANDLE)pMyObject, pValue, pUlSize);
    }
    else if( AnscEqualString(ParamName, "PrimaryLANBridge", TRUE) )
    {
        returnStatus = CosaDmlMlanGetPrimaryLanBridge((ANSC_HANDLE)pMyObject, pValue, pUlSize);
    }
    else if( AnscEqualString(ParamName, "PrimaryLANBridgeHSPorts", TRUE) )
    {
        returnStatus = CosaDmlMlanGetPrimaryLanBridgeHsPorts((ANSC_HANDLE)pMyObject, pValue, pUlSize);
    }
    else if( AnscEqualString(ParamName, "PrimaryLANDHCPv4ServerPool", TRUE) )
    {
        returnStatus = CosaDmlMlanGetPrimaryLanDhcpv4ServerPool((ANSC_HANDLE)pMyObject, pValue, pUlSize);
    }
    else if( AnscEqualString(ParamName, "HomeSecurityBridge", TRUE) )
    {
        returnStatus = CosaDmlMlanGetHomeSecurityBridge((ANSC_HANDLE)pMyObject, pValue, pUlSize);
    }
    else if( AnscEqualString(ParamName, "HomeSecurityBridgePorts", TRUE) )
    {
        returnStatus = CosaDmlMlanGetHomeSecurityBridgePorts((ANSC_HANDLE)pMyObject, pValue, pUlSize);
    }
    else if( AnscEqualString(ParamName, "HomeSecurityDHCPv4ServerPool", TRUE) )
    {
        returnStatus = CosaDmlMlanGetHomeSecurityDhcpv4ServerPool((ANSC_HANDLE)pMyObject, pValue, pUlSize);
    }
    else if( AnscEqualString(ParamName, "HomeSecurityWiFiRadio", TRUE) )
    {
        returnStatus = CosaDmlMlanGetHomeSecurityWiFiRadio((ANSC_HANDLE)pMyObject, pValue, pUlSize);
    }
    else if( AnscEqualString(ParamName, "HomeSecurityWiFiSsid", TRUE) )
    {
        returnStatus = CosaDmlMlanGetHomeSecurityWiFiSsid((ANSC_HANDLE)pMyObject, pValue, pUlSize);
    }
    else if( AnscEqualString(ParamName, "HomeSecurityWiFiAp", TRUE) )
    {
        returnStatus = CosaDmlMlanGetHomeSecurityWiFiAp((ANSC_HANDLE)pMyObject, pValue, pUlSize);
    }
    else
    {
        CcspTraceWarning(("Unsupported parameter '%s'\n", ParamName));
        return  -1;
    }

    /* Process the return code */
    if ( returnStatus == ANSC_STATUS_MORE_DATA )
    {
        return  1;
    }
    else if ( returnStatus == ANSC_STATUS_SUCCESS )
    {
        return  0;
    }
    else
    {
        /* What else can I return? */
        return  0;
    }
}
コード例 #12
0
ANSC_STATUS
CosaBridgingInitialize
    (
        ANSC_HANDLE                 hThisObject
    )
{
    ANSC_STATUS                     returnStatus        = ANSC_STATUS_SUCCESS;
    PCOSA_DATAMODEL_BRIDGING        pMyObject           = (PCOSA_DATAMODEL_BRIDGING)hThisObject;
    PSLAP_VARIABLE                  pSlapVariable       = (PSLAP_VARIABLE             )NULL;
    PPOAM_IREP_FOLDER_OBJECT        pPoamIrepFoCOSA     = (PPOAM_IREP_FOLDER_OBJECT   )NULL;
    PPOAM_IREP_FOLDER_OBJECT        pPoamIrepFoBRG      = (PPOAM_IREP_FOLDER_OBJECT   )NULL;
    PPOAM_IREP_FOLDER_OBJECT        pPoamIrepFoBRGHA    = (PPOAM_IREP_FOLDER_OBJECT   )NULL;
    PPOAM_IREP_FOLDER_OBJECT        pPoamIrepFoNextIns  = (PPOAM_IREP_FOLDER_OBJECT   )NULL;
    PCOSA_CONTEXT_LINK_OBJECT       pCosaContext        = (PCOSA_CONTEXT_LINK_OBJECT  )NULL;
    PCOSA_CONTEXT_LINK_OBJECT       pCosaContext2       = (PCOSA_CONTEXT_LINK_OBJECT  )NULL;
    PCOSA_CONTEXT_LINK_OBJECT       pCosaContext3       = (PCOSA_CONTEXT_LINK_OBJECT  )NULL;
    PCOSA_DML_BRG_FULL_ALL          pDmlBridge          = (PCOSA_DML_BRG_FULL_ALL     )NULL;
    PCOSA_DML_BRG_PORT_FULL         pPort               = (PCOSA_DML_BRG_PORT_FULL    )NULL;
    ULONG                           ulBridgeCount       = 0;
    ULONG                           ulSubCount          = 0;
    ULONG                           ulIndex             = 0;
    ULONG                           ulSubIndex          = 0;
    char                            FolderName[32]      = {0};
    PCOSA_DML_BRG_VLAN_FULL         pVLAN           = (PCOSA_DML_BRG_VLAN_FULL  )NULL;

    /* Initiation all functions */

//$HL 4/24/2013
    pMyObject->ulNextBridgeInstance = 1;

	AnscSListInitializeHeader(&pMyObject->BridgeList);

    //$HL 4/25/2013
    pMyObject->BridgeList.Depth = 0;
    
    pMyObject->hIrepFolderCOSA = g_GetRegistryRootFolder(g_pDslhDmlAgent);

    pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT)pMyObject->hIrepFolderCOSA;

    if ( !pPoamIrepFoCOSA )
    {
        returnStatus = ANSC_STATUS_FAILURE;

        goto EXIT;
    }

    pPoamIrepFoBRG =
        (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoCOSA->GetFolder
            (
			    (ANSC_HANDLE)pPoamIrepFoCOSA,
                COSA_IREP_FOLDER_NAME_BRIDGING
            );

    if ( !pPoamIrepFoBRG )
    {
        pPoamIrepFoBRG =
            pPoamIrepFoCOSA->AddFolder
                (
                    (ANSC_HANDLE)pPoamIrepFoCOSA,
                    COSA_IREP_FOLDER_NAME_BRIDGING,
                    0
                );
    }

    if ( !pPoamIrepFoBRG )
    {
        returnStatus = ANSC_STATUS_FAILURE;

        goto  EXIT;
    }
    else
    {
        pMyObject->hIrepFolderBRG = (ANSC_HANDLE)pPoamIrepFoBRG;
    }

    pPoamIrepFoBRGHA = 
        (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoBRG->GetFolder
            (
                (ANSC_HANDLE)pPoamIrepFoCOSA,
                COSA_IREP_FOLDER_NAME_BRIDGINGHA
            );

    if ( !pPoamIrepFoBRGHA )
    {
        pPoamIrepFoBRGHA =
            pPoamIrepFoBRG->AddFolder
                (
                    (ANSC_HANDLE)pPoamIrepFoBRG,
                    COSA_IREP_FOLDER_NAME_BRIDGINGHA,
                    0
                );
    }

    if ( !pPoamIrepFoBRGHA )
    {
        returnStatus = ANSC_STATUS_FAILURE;

        goto  EXIT;
    }
    else
    {
        pMyObject->hIrepFolderBRGHA = (ANSC_HANDLE)pPoamIrepFoBRGHA;
    }

    if ( TRUE )
    {
        _ansc_sprintf
        (
            FolderName, 
            "%s%d", 
            COSA_DML_RR_NAME_Bridge_NextInsNunmber,
            0
        );
        
        pPoamIrepFoNextIns = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoBRG->GetFolder
                                (
                                    (ANSC_HANDLE)pPoamIrepFoBRG,
                                    FolderName
                                );

        AnscZeroMemory(FolderName, 32);

        if ( pPoamIrepFoNextIns )
        {
            pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoNextIns->GetRecord
                                (
                                    (ANSC_HANDLE)pPoamIrepFoNextIns,
                                    COSA_DML_RR_NAME_Bridge_NextInsNunmber,
                                    NULL
                                );

            if ( pSlapVariable )
            {
                pMyObject->ulNextBridgeInstance = pSlapVariable->Variant.varUint32;
                
                SlapFreeVariable(pSlapVariable);
            }

            pPoamIrepFoNextIns->Remove((ANSC_HANDLE)pPoamIrepFoNextIns);
            pPoamIrepFoNextIns = NULL;
        }
    }

    ulBridgeCount = CosaDmlBrgGetNumberOfEntries(NULL);

    for ( ulIndex = 0; ulIndex < ulBridgeCount; ulIndex++ )
    {
        pDmlBridge = (PCOSA_DML_BRG_FULL_ALL)AnscAllocateMemory(sizeof(COSA_DML_BRG_FULL_ALL));
        _ansc_memset(pDmlBridge, 0, sizeof(COSA_DML_BRG_FULL_ALL));
        if ( !pDmlBridge )
        {
            returnStatus = ANSC_STATUS_RESOURCES;

            goto EXIT;
        }

        AnscSListInitializeHeader(&pDmlBridge->PortList);
        AnscSListInitializeHeader(&pDmlBridge->VLANList);
        AnscSListInitializeHeader(&pDmlBridge->VLANPortList);

        pDmlBridge->ulNextPortInsNum = 1;
        pDmlBridge->ulNextVLANInsNum = 1;
        pDmlBridge->ulNextVLANPortInsNum = 1;

        //$HL 4/25/2013
        if (CosaDmlBrgGetEntry(NULL, ulIndex, (PCOSA_DML_BRG_FULL)pDmlBridge)!= ANSC_STATUS_SUCCESS)
        {
            AnscFreeMemory(pDmlBridge);
            break;    
        }
        else
        //if ( TRUE )
        {
            pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT));
            _ansc_memset(pCosaContext, 0, sizeof(COSA_CONTEXT_LINK_OBJECT));
            if ( !pCosaContext )
            {
                AnscFreeMemory(pDmlBridge);

                returnStatus = ANSC_STATUS_RESOURCES;

                AnscTraceFlow(("<HL>%s cannot allocate pCosaContext\n", __FUNCTION__));
                goto  EXIT;
            }
            
            if ( pDmlBridge->Cfg.InstanceNumber !=0 )
            {
                pCosaContext->InstanceNumber = pDmlBridge->Cfg.InstanceNumber;

                if ( pMyObject->ulNextBridgeInstance <= pDmlBridge->Cfg.InstanceNumber )
                {
                    pMyObject->ulNextBridgeInstance = pDmlBridge->Cfg.InstanceNumber + 1;

                    if ( pMyObject->ulNextBridgeInstance == 0 )
                    {
                        pMyObject->ulNextBridgeInstance = 1;
                    }
                }
            }
            else
            {
                pDmlBridge->Cfg.InstanceNumber = pCosaContext->InstanceNumber = pMyObject->ulNextBridgeInstance;

                pMyObject->ulNextBridgeInstance++;

                if ( pMyObject->ulNextBridgeInstance == 0)
                {
                    pMyObject->ulNextBridgeInstance = 1;
                }

                _ansc_sprintf(pDmlBridge->Cfg.Alias, "DmlBridge%d", pMyObject->ulNextBridgeInstance);

                CosaDmlBrgSetValues(NULL, ulIndex, pDmlBridge->Cfg.InstanceNumber, pDmlBridge->Cfg.Alias);
            }

            pCosaContext->hContext     = (ANSC_HANDLE)pDmlBridge;
            pCosaContext->hParentTable = NULL;
            pCosaContext->bNew         = FALSE;
            //$HL 4/29/2013
            //pCosaContext->hPoamIrepUpperFo = NULL;
            CosaSListPushEntryByInsNum(&pMyObject->BridgeList, pCosaContext);
        }

        /* Port */
        
        if ( TRUE )
        {
            _ansc_sprintf
                (
                    FolderName, 
                    "%s%d", 
                    COSA_DML_RR_NAME_Bridge_Port_NextInsNumber, 
                    pDmlBridge->Cfg.InstanceNumber
                );

            pPoamIrepFoNextIns = 
                (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoBRG->GetFolder
                    (
                        (ANSC_HANDLE)pPoamIrepFoBRG,
                        FolderName
                    );

            if ( pPoamIrepFoNextIns )
            {
                pSlapVariable =
                    (PSLAP_VARIABLE)pPoamIrepFoNextIns->GetRecord
                        (
                            (ANSC_HANDLE)pPoamIrepFoNextIns,
                            COSA_DML_RR_NAME_Bridge_Port_NextInsNumber,
                            NULL
                        );

                if ( pSlapVariable )
                {
                    
                    pDmlBridge->ulNextPortInsNum = pSlapVariable->Variant.varUint32;
                    SlapFreeVariable(pSlapVariable);
                }
                else
                {
                    AnscTraceFlow(("<HL>%s pSlapVariable == NULL\n", __FUNCTION__));
                }

                pPoamIrepFoNextIns->Remove((ANSC_HANDLE)pPoamIrepFoNextIns);
                pPoamIrepFoNextIns = NULL;
            }
            else
            {
                AnscTraceFlow(("<HL>%s pPoamIrepFoNextIns == NULL\n", __FUNCTION__));
            }            
        }

        ulSubCount = CosaDmlBrgPortGetNumberOfEntries(NULL, pDmlBridge->Cfg.InstanceNumber);

        for ( ulSubIndex = 0; ulSubIndex < ulSubCount; ulSubIndex++ )
        {
            pPort = (PCOSA_DML_BRG_PORT_FULL)AnscAllocateMemory(sizeof(COSA_DML_BRG_PORT_FULL));

            if ( !pPort )
            {
                returnStatus = ANSC_STATUS_RESOURCES;

                goto EXIT;
            }

            _ansc_memset(pPort, 0, sizeof(COSA_DML_BRG_PORT_FULL));

            if(CosaDmlBrgPortGetEntry(NULL, pDmlBridge->Cfg.InstanceNumber, ulSubIndex, pPort)
                != ANSC_STATUS_SUCCESS)
            {
                AnscFreeMemory(pPort);
                break;
            }
            else 
            {
                pCosaContext2 = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT));

                if ( !pCosaContext2 )
                {  
                    AnscFreeMemory(pPort);
                    returnStatus = ANSC_STATUS_RESOURCES;
                    AnscTraceFlow(("<$HL> %s bridge instance:%d cannot allocate any memory for pCosaContext2\n",__FUNCTION__,
                        pDmlBridge->Cfg.InstanceNumber));
                    AnscFreeMemory(pPort);
                    goto EXIT;
                }

                _ansc_memset(pCosaContext2, 0, sizeof(COSA_CONTEXT_LINK_OBJECT));

                if ( pPort->Cfg.InstanceNumber != 0 )
                {
                    pCosaContext2->InstanceNumber = pPort->Cfg.InstanceNumber;

                    if ( pDmlBridge->ulNextPortInsNum <= pPort->Cfg.InstanceNumber )
                    {
                        pDmlBridge->ulNextPortInsNum = pPort->Cfg.InstanceNumber + 1;

                        if ( pDmlBridge->ulNextPortInsNum == 0 )
                        {
                            pDmlBridge->ulNextPortInsNum = 1;
                        }
                    }
                }
                else
                {
                    pCosaContext2->InstanceNumber = pPort->Cfg.InstanceNumber = pDmlBridge->ulNextPortInsNum;

                    pDmlBridge->ulNextPortInsNum++;

                    if ( pDmlBridge->ulNextPortInsNum == 0 )
                    {
                        pDmlBridge->ulNextPortInsNum = 1;
                    }

                    _ansc_sprintf(pPort->Cfg.Alias, "Port%d", pCosaContext2->InstanceNumber);

                    CosaDmlBrgPortSetValues
                        (
                            NULL,
                            pDmlBridge->Cfg.InstanceNumber,
                            ulSubIndex,
                            pPort->Cfg.InstanceNumber,
                            pPort->Cfg.Alias
                        );
                }

                pCosaContext2->hContext     = (ANSC_HANDLE)pPort;
                pCosaContext2->hParentTable = (ANSC_HANDLE)pDmlBridge;
                pCosaContext2->bNew         = FALSE;

                CosaSListPushEntryByInsNum(&pDmlBridge->PortList, pCosaContext2);
            }
        }
    

        //$HL 7/3/2013
        /* VLAN */
        
        if ( TRUE )
        {
            _ansc_sprintf
                (
                    FolderName, 
                    "%s%d", 
                    COSA_DML_RR_NAME_Bridge_VLAN_NextInsNumber, 
                    pDmlBridge->Cfg.InstanceNumber
                );

            pPoamIrepFoNextIns = 
                (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoBRG->GetFolder
                    (
                        (ANSC_HANDLE)pPoamIrepFoBRG,
                        FolderName
                    );

            if ( pPoamIrepFoNextIns )
            {
                pSlapVariable =
                    (PSLAP_VARIABLE)pPoamIrepFoNextIns->GetRecord
                        (
                            (ANSC_HANDLE)pPoamIrepFoNextIns,
                            COSA_DML_RR_NAME_Bridge_VLAN_NextInsNumber,
                            NULL
                        );

                if ( pSlapVariable )
                {
                    
                    pDmlBridge->ulNextVLANInsNum = pSlapVariable->Variant.varUint32;
                    SlapFreeVariable(pSlapVariable);
                }
                else
                {
                    AnscTraceFlow(("<HL>%s pSlapVariable == NULL\n", __FUNCTION__));
                }

                pPoamIrepFoNextIns->Remove((ANSC_HANDLE)pPoamIrepFoNextIns);
                pPoamIrepFoNextIns = NULL;
            }
            else
            {
                AnscTraceFlow(("<HL>%s pPoamIrepFoNextIns == NULL\n", __FUNCTION__));
            }            
        }

        ulSubCount = CosaDmlBrgVlanGetNumberOfEntries(NULL, pDmlBridge->Cfg.InstanceNumber);

        for ( ulSubIndex = 0; ulSubIndex < ulSubCount; ulSubIndex++ )
        {
            pVLAN = (PCOSA_DML_BRG_VLAN_FULL)AnscAllocateMemory(sizeof(COSA_DML_BRG_VLAN_FULL));

            if ( !pVLAN )
            {
                returnStatus = ANSC_STATUS_RESOURCES;

                goto EXIT;
            }

            _ansc_memset(pVLAN, 0, sizeof(COSA_DML_BRG_VLAN_FULL));

            if(CosaDmlBrgVlanGetEntry(NULL, pDmlBridge->Cfg.InstanceNumber, ulSubIndex, pVLAN)
                != ANSC_STATUS_SUCCESS)
            {
                AnscFreeMemory(pVLAN);
                break;
            }
            else 
            {
                pCosaContext3 = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT));

                if ( !pCosaContext3 )
                {  
                    returnStatus = ANSC_STATUS_RESOURCES;
                    AnscTraceFlow(("<$HL> %s bridge instance:%d cannot allocate any memory for pCosaContext3\n",__FUNCTION__,
                        pDmlBridge->Cfg.InstanceNumber));
                    AnscFreeMemory(pVLAN);
                    goto EXIT;
                }

                _ansc_memset(pCosaContext3, 0, sizeof(COSA_CONTEXT_LINK_OBJECT));

                if ( pVLAN->Cfg.InstanceNumber != 0 )
                {
                    pCosaContext3->InstanceNumber = pVLAN->Cfg.InstanceNumber;

                    if ( pDmlBridge->ulNextVLANInsNum <= pVLAN->Cfg.InstanceNumber )
                    {
                        pDmlBridge->ulNextVLANInsNum = pVLAN->Cfg.InstanceNumber + 1;

                        if ( pDmlBridge->ulNextVLANInsNum == 0 )
                        {
                            pDmlBridge->ulNextVLANInsNum = 1;
                        }
                    }
                }
                else
                {
                    pCosaContext2->InstanceNumber = pVLAN->Cfg.InstanceNumber = pDmlBridge->ulNextPortInsNum;

                    pDmlBridge->ulNextVLANInsNum++;

                    if ( pDmlBridge->ulNextVLANInsNum == 0 )
                    {
                        pDmlBridge->ulNextVLANInsNum = 1;
                    }

                    _ansc_sprintf(pVLAN->Cfg.Alias, "VLAN%d", pCosaContext2->InstanceNumber);

                    CosaDmlBrgVlanSetValues //new sbAPI
                        (
                            NULL,
                            pDmlBridge->Cfg.InstanceNumber,
                            ulSubIndex,
                            pVLAN->Cfg.InstanceNumber,
                            pVLAN->Cfg.Alias
                        );
                }

                pCosaContext3->hContext     = (ANSC_HANDLE)pVLAN;
                pCosaContext3->hParentTable = (ANSC_HANDLE)pDmlBridge;
                pCosaContext3->bNew         = FALSE;

                CosaSListPushEntryByInsNum(&pDmlBridge->VLANList, pCosaContext3);
            }
        }
    }
    //$HL 4/29/2013
    CosaBridgingRegGetInfo((ANSC_HANDLE)pMyObject);

EXIT:

    return returnStatus;
}