📄 snmphelper.cpp
字号:
UINT32 ProgramNo;
UINT32 IsSet;
enum_ServiceFormat OutputFormat;//RW
UINT32 OutputRate;//RW
char DestAddr[30];//RW
char DestPort[5];//RW
enum_Protocol Protocol;
UINT32 PoolPort;//RW
}struct_ConfTable;
*/
//change to
pConfTable->dvbBladeNo=g_ConfTable[index].BladeNo;
pConfTable->dvbSubboardNo=g_ConfTable[index].SubboardNo;
pConfTable->dvbVideoPortNo=g_ConfTable[index].VideoPortNo;
pConfTable->dvbProgramNo=g_ConfTable[index].ProgramNo;
pConfTable->dvbConfIsSet=g_ConfTable[index].IsSet;
pConfTable->dvbConfOutputFormat=(long)g_ConfTable[index].OutputFormat;
pConfTable->dvbConfOutputRate=g_ConfTable[index].OutputRate;
strcpy(pConfTable->dvbConfDestAddr,g_ConfTable[index].DestAddr);
pConfTable->dvbConfDestPort=atoi(g_ConfTable[index].DestPort);
pConfTable->dvbConfProtocol=(long)g_ConfTable[index].Protocol;
pConfTable->dvbConfPoolPort=g_ConfTable[index].PoolPort;
shmdt(shmConfTable);
return STATUS_OK;
}
STATUS snmpWriteSubboardTableAll()
{
//for share memory of SubboardTable
key_t keyShmSubboardTable;
int shmSubboardTable_id;
UINT8* shmSubboardTable;
struct dvbSubboardInfoTable_entry* pSubboardTable;
UINT32 index;
//init share memory of SubboardTable
keyShmSubboardTable = ftok(FTOKPATH_SUBBOARD,1);
shmSubboardTable_id = shmget(keyShmSubboardTable,SEGSUBSIZE,0);
if(-1 == shmSubboardTable_id){
DebugPrint(g_DbgLevel,g_fpLogFile," create shared memory of SubboardTable error\n");
return STATUS_ERROR;
}
shmSubboardTable= (UINT8 *)shmat(shmSubboardTable_id,0,0);
if (-1 == (int)shmSubboardTable){
DebugPrint(g_DbgLevel,g_fpLogFile," attach shared memory error\n");
return STATUS_ERROR;
}
for(index=0;index<MAXSUBBOARD;index++)
{
pSubboardTable=((struct dvbSubboardInfoTable_entry*)shmSubboardTable)+index;
/*
typedef struct
{
//For Index;
UINT32 BladeNo;
UINT32 SubboardNo;
enum_SubboardType SubboardType;
enum_SubboardStatus SubboardStatus;
enum_WorkSetting SubboardWorkSetting;//RW
}struct_SubboardInfo;
*/
//change to
pSubboardTable->dvbBladeNo=g_SubboardInfo[index].BladeNo;
pSubboardTable->dvbSubboardNo=g_SubboardInfo[index].SubboardNo;
pSubboardTable->dvbSubboardType=(long)g_SubboardInfo[index].SubboardType;
pSubboardTable->dvbSubboardStatus=(long)g_SubboardInfo[index].SubboardStatus;
pSubboardTable->dvbSubboardWorkSetting=(long)g_SubboardInfo[index].SubboardWorkSetting;
}
printf("in the snmpWriteSubboardTableAll()\n");
shmdt(shmSubboardTable);
return STATUS_OK;
}
STATUS snmpWriteSubboardTable(int index)
{
//for share memory of SubboardTable
key_t keyShmSubboardTable;
int shmSubboardTable_id;
UINT8* shmSubboardTable;
struct dvbSubboardInfoTable_entry* pSubboardTable;
//init share memory of SubboardTable
keyShmSubboardTable = ftok(FTOKPATH_SUBBOARD,1);
shmSubboardTable_id = shmget(keyShmSubboardTable,SEGSUBSIZE,0);
if(-1 == shmSubboardTable_id){
DebugPrint(g_DbgLevel,g_fpLogFile," create shared memory of SubboardTable error\n");
return STATUS_ERROR;
}
shmSubboardTable= (UINT8 *)shmat(shmSubboardTable_id,0,0);
if (-1 == (int)shmSubboardTable){
DebugPrint(g_DbgLevel,g_fpLogFile," attach shared memory error\n");
return STATUS_ERROR;
}
pSubboardTable=((struct dvbSubboardInfoTable_entry*)shmSubboardTable)+index;
/*
typedef struct
{
//For Index;
UINT32 BladeNo;
UINT32 SubboardNo;
enum_SubboardType SubboardType;
enum_SubboardStatus SubboardStatus;
enum_WorkSetting SubboardWorkSetting;//RW
}struct_SubboardInfo;
*/
//change to
pSubboardTable->dvbBladeNo=g_SubboardInfo[index].BladeNo;
pSubboardTable->dvbSubboardNo=g_SubboardInfo[index].SubboardNo;
pSubboardTable->dvbSubboardType=(long)g_SubboardInfo[index].SubboardType;
pSubboardTable->dvbSubboardStatus=(long)g_SubboardInfo[index].SubboardStatus;
pSubboardTable->dvbSubboardWorkSetting=(long)g_SubboardInfo[index].SubboardWorkSetting;
shmdt(shmSubboardTable);
return STATUS_OK;
}
void* snmpConfigMain(void* param)
{
//for semaphore
key_t keySem;
int semid;
//for semaphoreconf
key_t keySemConf;
int semconfid;
//for share memory of Index
key_t keyShmIndex;
int shmIndex_id;
UINT8* shmIndex;
UINT8 nChangedContentType;
UINT8 index;
//for share memory of ConfTable
key_t keyShmConfTable;
int shmConfTable_id;
UINT8* shmConfTable;
struct dvbConfigTable_entry* pConfigTable;
//for share memory of VideoPortTable
key_t keyShmVideoPortTable;
int shmVideoPortTable_id;
UINT8* shmVideoPortTable;
struct dvbVideoPortInfoTable_entry* pVideoPortTable;
//for share memory of SubboardTable
key_t keyShmSubboardTable;
int shmSubboardTable_id;
UINT8* shmSubboardTable;
struct dvbSubboardInfoTable_entry* pSubboardTable;
//for share memory of BladeInfo
key_t keyShmBladeInfo;
int shmBladeInfo_id;
UINT8* shmBladeInfo;
struct bladeInfo* pBladeInfo;
char i;
//init semaphore
keySem = ftok(FTOKPATH_SEMAPHORE,1);
semid = get_created_sem(keySem);
//init semaphoreConf
keySemConf = ftok(FTOKPATH_CONFSEMAPHORE,1);
semconfid = get_created_sem(keySemConf);
//init share memory of Index
keyShmIndex = ftok(FTOKPATH_INDEX,1);
shmIndex_id = shmget(keyShmIndex,SEGINDEXSIZE,0);
if(-1 == shmIndex_id){
DebugPrint(g_DbgLevel,g_fpLogFile," create shared memory of config table error\n");
return (void*)(-1);
}
//init share memory of ConfTable
keyShmConfTable = ftok(FTOKPATH_CONFIG,1);
shmConfTable_id = shmget(keyShmConfTable,SEGCONFSIZE,0);
if(-1 == shmConfTable_id){
DebugPrint(g_DbgLevel,g_fpLogFile," create shared memory of config table error\n");
return (void*)(-1);
}
//init share memory of VideoPortTable
keyShmVideoPortTable = ftok(FTOKPATH_VIDEOPORT,1);
shmVideoPortTable_id = shmget(keyShmVideoPortTable,SEGVIDEOSIZE,0);
if(-1 == shmVideoPortTable_id){
DebugPrint(g_DbgLevel,g_fpLogFile," create shared memory of config table error\n");
return (void*)(-1);
}
//init share memory of SubboardTable
keyShmSubboardTable = ftok(FTOKPATH_SUBBOARD,1);
shmSubboardTable_id = shmget(keyShmSubboardTable,SEGSUBSIZE,0);
if(-1 == shmSubboardTable_id){
DebugPrint(g_DbgLevel,g_fpLogFile," create shared memory of config table error\n");
return (void*)(-1);
}
//init share memory of BladeInfo
keyShmBladeInfo = ftok(FTOKPATH_BLADE,1);
shmBladeInfo_id = shmget(keyShmBladeInfo,SEGBLADESIZE,0);
if(-1 == shmBladeInfo_id){
DebugPrint(g_DbgLevel,g_fpLogFile," create shared memory of config table error\n");
return (void*)(-1);
}
DebugPrint(g_DbgLevel,g_fpLogFile,"Thread of snmpConfig has been started\n");
block_sem(semid);
/*
DebugPrint(g_DbgLevel,g_fpLogFile,"after block_sem(semid)\n");
print_sem_value(semid);
*/
while(1){
/*
DebugPrint(g_DbgLevel,g_fpLogFile,"before p_wait(semid)\n");
print_sem_value(semid);
*/
//printf("before:semid:%d,value:%d\n",semid,semctl(semid,0,GETVAL,0));
p_wait(semid);
//printf("aftere:semid:%d,value:%d\n",semid,semctl(semid,0,GETVAL,0));
/*
DebugPrint(g_DbgLevel,g_fpLogFile,"after p_wait(semid)\n");
print_sem_value(semid);
*/
//get information of Index
shmIndex = (UINT8 *)shmat(shmIndex_id,0,0);
if (-1 == (int)shmIndex){
DebugPrint(g_DbgLevel,g_fpLogFile," attach shared memory error\n");
return (void*)(-1);
}
nChangedContentType=*(shmIndex);
index=*(shmIndex+1);
shmdt(shmIndex);
DebugPrint(g_DbgLevel,g_fpLogFile,"config change:nChangedContentType=%d,index=%d\n",nChangedContentType,index);
switch(nChangedContentType)
{
case CONFIGCHANGE:
//get information of config table and make change to global variables
{
if(index==MAXSUBBOARD*MAXVIDEOPORT*MAXPROGRAM)
{
//caused because reload config
ReadConfigFromFile();
snmpWriteConfTableAll();
snmp_TrapConfigChange(5, g_BladeInfo.BladeNo,g_BladeInfo.BladeIPv4);
if(IsSingleBoard == FALSE)
snmp_TrapConfigChange(5, g_BladeInfo.BladeNo,g_BladeInfo.BackBladeIPv4);
}
else
{
shmConfTable = (UINT8 *)shmat(shmConfTable_id,0,0);
if (-1 == (int)shmConfTable){
DebugPrint(g_DbgLevel,g_fpLogFile," attach shared memory error\n");
return (void*)(-1);
}
pConfigTable=((struct dvbConfigTable_entry*)shmConfTable)+index;
//for debug
/*
DebugPrint(g_DbgLevel,g_fpLogFile,"pConfigTable->dvbSubboardNo=%d\n",pConfigTable->dvbSubboardNo );
DebugPrint(g_DbgLevel,g_fpLogFile,"pConfigTable->dvbVideoPortNo=%d\n",pConfigTable->dvbVideoPortNo );
DebugPrint(g_DbgLevel,g_fpLogFile,"pConfigTable->dvbProgramNo=%d\n",pConfigTable->dvbProgramNo );
DebugPrint(g_DbgLevel,g_fpLogFile,"pConfigTable->dvbConfIsSet=%d\n",pConfigTable->dvbConfIsSet);
DebugPrint(g_DbgLevel,g_fpLogFile,"pConfigTable->dvbConfOutputFormat=%d\n",pConfigTable->dvbConfOutputFormat);
DebugPrint(g_DbgLevel,g_fpLogFile,"pConfigTable->dvbConfOutputRate=%d\n",pConfigTable->dvbConfOutputRate );
DebugPrint(g_DbgLevel,g_fpLogFile,"pConfigTable->dvbConfDestAddr=%s\n",pConfigTable->dvbConfDestAddr );
DebugPrint(g_DbgLevel,g_fpLogFile,"pConfigTable->dvbConfDestPort =%d\n",pConfigTable->dvbConfDestPort );
DebugPrint(g_DbgLevel,g_fpLogFile,"pConfigTable->dvbConfProtocol =%d\n",pConfigTable->dvbConfProtocol );
DebugPrint(g_DbgLevel,g_fpLogFile,"pConfigTable->dvbConfPoolPort=%d\n\n",pConfigTable->dvbConfPoolPort);
*/
//change to
g_ConfTable[index].OutputFormat=(enum_ServiceFormat)pConfigTable->dvbConfOutputFormat;
g_ConfTable[index].OutputRate=pConfigTable->dvbConfOutputRate;
sprintf(g_ConfTable[index].DestAddr,pConfigTable->dvbConfDestAddr);
sprintf(g_ConfTable[index].DestPort,"%d",pConfigTable->dvbConfDestPort);
g_ConfTable[index].Protocol=(enum_Protocol)pConfigTable->dvbConfProtocol;
g_ConfTable[index].PoolPort=pConfigTable->dvbConfPoolPort;
g_ConfTable[index].IsSet=pConfigTable->dvbConfIsSet;
FillDstAddr(index);
WriteProgramConfigToFile(index/(MAXVIDEOPORT*MAXPROGRAM), (index/MAXPROGRAM)%MAXVIDEOPORT, index%MAXPROGRAM);
shmdt(shmConfTable);
v_nowait(semconfid);
}
break;
}
case SLAVEMCUCHANGE:
//Modify the g_BladeInfo
{
UINT8 subboardindex;
UINT8 videoportindex;
shmBladeInfo= (UINT8 *)shmat(shmBladeInfo_id,0,0);
if (-1 == (int)shmBladeInfo){
DebugPrint(g_DbgLevel,g_fpLogFile," attach shared memory error\n");
return (void*)(-1);
}
pBladeInfo=(struct bladeInfo*)shmBladeInfo;
/*
g_BladeInfo.BladeNo=pBladeInfo->dvbMasterBladeNumber;
strcpy(g_BladeInfo.BladeIPv4,pBladeInfo->dvbMasterBladeIPv4);
strcpy(g_BladeInfo.BladeIPv6,pBladeInfo->dvbMasterBladeIPv6);
strcpy(g_BladeInfo.BladeGateway,pBladeInfo->dvbMasterBladeGateway);
g_BladeInfo.BladeStatus=(enum_BladeStatus)pBladeInfo->dvbMasterBladeStatus;
g_BladeInfo.MCUStatus=(enum_MCUStatus)pBladeInfo->dvbMasterMCUStatus;
g_BladeInfo.BackBladeNo=pBladeInfo->dvbSlaveBladeNumber;
strcpy(g_BladeInfo.BackBladeIPv4,pBladeInfo->dvbSlaveBladeIPv4);
strcpy(g_BladeInfo.BackBladeIPv6,pBladeInfo->dvbSlaveBladeIPv6);
strcpy(g_BladeInfo.BackBladeGateway,pBladeInfo->dvbSlaveBladeGateway);
g_BladeInfo.BackBladeStatus=(enum_BladeStatus)pBladeInfo->dvbSlaveBladeStatus;
*/
g_BladeInfo.BackMCUStatus=(enum_MCUStatus)pBladeInfo->dvbSlaveMCUStatus;
shmdt(shmBladeInfo);
/*
if(g_BladeInfo.BackMCUStatus == MCU_STATUS_ALIVE)
gCut = 2;
if(g_BladeInfo.BackMCUStatus = MCU_STATUS_ALIVE)
{
for(subboardindex=0;subboardindex<MAXSUBBOARD;subboardindex++)
{
if(g_SubboardInfo[subboardindex].SubboardStatus==SUBBOARD_NORMAL)
{
for(videoportindex=0;videoportindex<MAXVIDEOPORT;videoportindex++)
{
if(g_VideoPortInfo[subboardindex*MAXVIDEOPORT+videoportindex].VideoPortStatus==HasStream)
snmp_TrapSIInfoChange(5, g_BladeInfo.BladeNo,subboardindex,videoportindex,g_BladeInfo.BackBladeIPv4);
}
}
}
}
*/
DebugPrint(g_DbgLevel,g_fpLogFile,"g_BladeInfo.BackMCUStatus=%d\n",g_BladeInfo.BackMCUStatus);
//WriteBladeInfoToFile();
break;
}
case WATCHDOG:
//Modify the HasStream and clear all watchdog
{
shmVideoPortTable= (UINT8 *)shmat(shmVideoPortTable_id,0,0);
if (-1 == (int)shmVideoPortTable){
DebugPrint(g_DbgLevel,g_fpLogFile," attach shared memory error\n");
return (void*)(-1);
}
printf("g_VideoPortInfo[%d].VideoPortStatus=%d\n",index,g_VideoPortInfo[index].VideoPortStatus);
pVideoPortTable=((struct dvbVideoPortInfoTable_entry*)shmVideoPortTable)+index;
if(g_VideoPortInfo[index].VideoPortStatus==NoStream)
{
g_VideoPortInfo[index].VideoPortProgramNumber=0;
pVideoPortTable->dvbVideoPortStatus=NoStream;
pVideoPortTable->dvbVideoPortProgramNumber=0;
}
shmdt(shmVideoPortTable);
WriteVideoPortInfoToFile(index/MAXVIDEOPORT, index%MAXVIDEOPORT);
g_VideoPortInfo[index].VideoPortStatus=NoStream;
break;
}
case VIDEOPORTCHANGE:
//get information of VideoPortInfo table and make change to global variables
{
shmVideoPortTable= (UINT8 *)shmat(shmVideoPortTable_id,0,0);
if (-1 == (int)shmVideoPortTable){
DebugPrint(g_DbgLevel,g_fpLogFile," attach shared memory error\n");
return (void*)(-1);
}
pVideoPortTable=((struct dvbVideoPortInfoTable_entry*)shmVideoPortTable)+index;
//for debug
DebugPrint(g_DbgLevel,g_fpLogFile,"pVideoPortTable->dvbVideoPortWorkSetting=%d\n",pVideoPortTable->dvbVideoPortWorkSetting);
//change to
g_VideoPortInfo[index].VideoPortWorkSetting=(enum_VideoPortWorkSetting)pVideoPortTable->dvbVideoPortWorkSetting;
shmdt(shmVideoPortTable);
break;
}
case SUBBOARDCHANGE:
//get information of SubboardInfo table and make change to global variables
{
shmSubboardTable= (UINT8 *)shmat(shmSubboardTable_id,0,0);
if (-1 == (int)shmSubboardTable){
DebugPrint(g_DbgLevel,g_fpLogFile," attach shared memory error\n");
return (void*)(-1);
}
pSubboardTable=((struct dvbSubboardInfoTable_entry*)shmSubboardTable)+index;
//for debug
DebugPrint(g_DbgLevel,g_fpLogFile,"pSubboardTable->dvbSubboardWorkSetting=%d\n",pSubboardTable->dvbSubboardWorkSetting);
//change to
g_SubboardInfo[index].SubboardWorkSetting=(enum_SubboardWorkSetting)pSubboardTable->dvbSubboardWorkSetting;
shmdt(shmSubboardTable);
break;
}
default:
break;
}
}
//detach shared memory
//shmdt(shmIndex);
//shmdt(shmConfTable);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -