char* _ansc_strdup ( char* pSrc ) { char* pTemp; ULONG ulLen; ulLen = _ansc_strlen(pSrc) + 1; pTemp = AnscAllocateMemory(ulLen); _ansc_strcpy(pTemp, pSrc); return pTemp; }
char* _ansc_strdup ( char* pSrc ) { char* pTemp; ULONG ulLen; ulLen = _ansc_strlen(pSrc) + 1; pTemp = malloc(ulLen); _ansc_strcpy(pTemp, pSrc); return pTemp; }
void CosaDmlNeighborTableGetEntry ( ANSC_HANDLE hContext, PULONG pulInstanceNumber, PCOSA_DML_NEIGHTABLE_INFO* ppNbTbl ) { char cmd[] = "ip -6 neigh show |grep -E 'brlan0' > " NEIGHBOR_TABLE_RESULT_FILE "\n"; char cmd2[] = "grep lladdr -c " NEIGHBOR_TABLE_RESULT_FILE "> " NEIGHBOR_TABLE_LINENUM_FILE "\n"; FILE* fp = NULL; char buf[128] = {0}; int counter = 0; int i = 0; char *p = NULL; char *p1 = NULL; if ( *ppNbTbl ){ free(*ppNbTbl); *ppNbTbl = NULL; *pulInstanceNumber = 0; } system(cmd); system(cmd2); fp = fopen(NEIGHBOR_TABLE_LINENUM_FILE, "r"); if (NULL != fp) { fgets(buf, sizeof(buf), fp); counter = atoi(buf); fprintf(stderr, "%s -- %d %d\n", __FUNCTION__, __LINE__, counter); fclose(fp); } if ( counter <= 0 ){ return; } *ppNbTbl = malloc(sizeof(COSA_DML_NEIGHTABLE_INFO)*counter); if ( *ppNbTbl == NULL ){ return; } /* 2040:cafe::5850:5ff9:d425:f21c dev brlan0 lladdr 3c:97:0e:44:50:95 REACHABLE fe80::9490:e980:ba75:3632 dev brlan0 lladdr 3c:97:0e:44:50:95 REACHABLE fe80::21f:caff:fe5e:4f55 dev erouter0 lladdr 00:1f:ca:5e:4f:55 router STALE */ fp = fopen(NEIGHBOR_TABLE_RESULT_FILE, "r"); if (NULL != fp) { i = 0; while( fgets(buf, sizeof(buf), fp) ) { p = &buf[0]; p1 = p; //get address while(*p != ' ') p++; *p = 0; _ansc_strcpy((*ppNbTbl)[i].Address, p1); p++; //get interface p = _ansc_strstr(p, "dev "); if ( p == NULL ){ *pulInstanceNumber = i; fclose(fp);/*RDKB-6843, CID-33223, free unused resource befor exit*/ return; } p += _ansc_strlen("dev "); while(*p == ' ') p++; p1 = p; while(*p != ' ') p++; *p = 0; _ansc_strcpy((*ppNbTbl)[i].Interface, p1); p++; //get mac p = _ansc_strstr(p, "lladdr "); if ( p == NULL ){ *pulInstanceNumber = i; fclose(fp);/*RDKB-6843, CID-33223, free unused resource befor exit*/ return; } p += _ansc_strlen("lladdr "); while(*p == ' ') p++; p1 = p; while(*p != ' ') p++; *p = 0; _ansc_strcpy((*ppNbTbl)[i].MACAddress, p1); p++; //get status if ( _ansc_strstr(p, "INCOMPLETE" )){ (*ppNbTbl)[i].Status = NEIGHBOR_STATUS_INCOMPLETE; }else if ( _ansc_strstr(p, "REACHABLE" )){ (*ppNbTbl)[i].Status = NEIGHBOR_STATUS_REACHABLE; }else if ( _ansc_strstr(p, "STALE" )){ (*ppNbTbl)[i].Status = NEIGHBOR_STATUS_STALE; }else if ( _ansc_strstr(p, "DELAY" )){ (*ppNbTbl)[i].Status = NEIGHBOR_STATUS_DELAY; }else if ( _ansc_strstr(p, "PROBE" )){ (*ppNbTbl)[i].Status = NEIGHBOR_STATUS_PROBE; }else{ *pulInstanceNumber = i; fclose(fp);/*RDKB-6843, CID-33223, free unused resource befor exit*/ return; } i++; } *pulInstanceNumber = i; fclose(fp); } return; }
ANSC_STATUS Pam_GetFirstIpInterfaceObjectName ( BOOL bUpstream, char* pIfObjName, PULONG pulObjNameSize ) { ANSC_STATUS returnStatus = ANSC_STATUS_CANT_FIND; int iReturnValue = 0; ULONG ulTotal = 0; ULONG ulIndex = 0; ULONG ulInstNum = 0; ULONG ulLen = 0; char pObjName[256] = {0}; char Buffer[128] = {0}; ULONG BufferSize = 0; char LowerLayers[256] = {0}; ULONG LowerLayersSize = 0; BOOL bLowerLayerUpstream = FALSE; char* EnvIndex = NULL; ULONG ulEnvIndex = PAM_MAX_IP_INTERFACE_NUM; CcspTraceInfo(("[%s] -- Enter \n", __FUNCTION__)); #ifdef _COSA_SIM_ // Hard coded, RTian 09/20/2013 { if(bUpstream) { pulObjNameSize = sprintf(pIfObjName, "Device.IP.Interface.1.") + 1; // else pulObjNameSize = sprintf(pIfObjName, "Device.IP.Interface.4.") + 1; CcspTraceInfo(("[%s] -- Exit, defined _COSA_SIM_ pulObjNameSize: %d from \n", __FUNCTION__, pulObjNameSize)); return ANSC_STATUS_SUCCESS; } } #endif ulTotal = CosaGetParamValueUlong("Device.IP.InterfaceNumberOfEntries"); EnvIndex = getenv(PAM_FIRST_IP_INTERFACE); if(EnvIndex != NULL) { ulEnvIndex = atol(EnvIndex); } for ( ulIndex = 0; ulIndex < ulTotal; ulIndex++ ) { if(EnvIndex != NULL && ulEnvIndex < PAM_MAX_IP_INTERFACE_NUM) { ulInstNum = CosaGetInstanceNumberByIndex("Device.IP.Interface.", ulEnvIndex); if( 0 == ulInstNum) { EnvIndex = NULL; ulEnvIndex = PAM_MAX_IP_INTERFACE_NUM; } else { ulIndex = EnvIndex; } } ulInstNum = CosaGetInstanceNumberByIndex("Device.IP.Interface.", ulIndex); if ( 0 == ulInstNum ) { CcspTraceWarning(("Pam_GetFirstIpInterfaceObjectName -- invalid Device.IP.Interface instance number!\n")); returnStatus = ANSC_STATUS_FAILURE; break; } else { _ansc_sprintf(pObjName, "Device.IP.Interface.%d.LowerLayers", ulInstNum); /*CcspTraceInfo(("Checking %s...\n", pObjName));*/ LowerLayersSize = sizeof(LowerLayers); iReturnValue = CosaGetParamValueString(pObjName, LowerLayers, &LowerLayersSize); if ( iReturnValue != 0 ) { returnStatus = ANSC_STATUS_FAILURE; break; } else if ( LowerLayersSize == 0 ) { continue; } do { /* * We have to check whether LowerLayers is a partial object name (without '.' at the end) or not * Assuming only one lower layer value for now * Look for the LowerLayer with a empty LowerLayers parameter */ ulLen = _ansc_strlen(LowerLayers); if ( LowerLayers[ulLen - 1] == '.' ) { LowerLayers[ulLen - 1] = '\0'; } _ansc_strcpy (pObjName, LowerLayers); _ansc_sprintf(Buffer, "%s.LowerLayers", LowerLayers); CcspTraceDebug(("Checking %s...\n", Buffer)); LowerLayersSize = sizeof(LowerLayers); iReturnValue = CosaGetParamValueString(Buffer, LowerLayers, &LowerLayersSize); if ( iReturnValue != 0 ) { break; } else if ( LowerLayersSize == 0 ) { break; } } while (TRUE); /* * Check the Upstream parameter. * Note, not all error cases are covered well here, which happened to help to pass the test * on DRG -- LowerLayers parameter of IP.Interface on top of Bridge.1 is not actually correct. */ _ansc_sprintf(Buffer, "%s.Upstream", pObjName); bLowerLayerUpstream = CosaGetParamValueBool(Buffer); if ( bUpstream == bLowerLayerUpstream ) { CcspTraceDebug (( "Found the lowest %s layer %s for IP interface Device.IP.Interface.%d.\n", bUpstream ? "upstream" : "downstream", LowerLayers, ulInstNum )); _ansc_sprintf(Buffer, "Device.IP.Interface.%d.", ulInstNum); BufferSize = _ansc_strlen(Buffer); if ( BufferSize < *pulObjNameSize ) { AnscCopyString(pIfObjName, Buffer); *pulObjNameSize = BufferSize; returnStatus = ANSC_STATUS_SUCCESS; } else { *pulObjNameSize = BufferSize; returnStatus = ANSC_STATUS_MORE_DATA; } break; } } } CcspTraceInfo(("[%s] -- Exit returnStatus: %d\n", __FUNCTION__, returnStatus)); return returnStatus; }