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; }
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; }
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; }
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; }
ULONG CosaDmlEthPortGetNumberOfEntries ( ANSC_HANDLE hContext ) { AnscTraceFlow(("%s...\n", __FUNCTION__)); return ETH_INT_COUNT; }
ANSC_STATUS CosaDmlEthPortSetValues ( ANSC_HANDLE hContext, ULONG ulIndex, ULONG ulInstanceNumber, char* pAlias ) { AnscTraceFlow(("%s...\n", __FUNCTION__)); return ANSC_STATUS_SUCCESS; }
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; } }
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; }
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; }
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; } } }
/********************************************************************** 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; } }
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; }