⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmphelper.cpp

📁 linux下网络管理协议snmp的实现
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -