int CSVBaseSNMP::InitSNMPV3() { static const char chEngineId[] = "snmpWalk"; //Engine ID static const char chFilename[] = "snmpv3_boot_counter"; //Local File Name unsigned int snmpEngineBoots = 0; int nStatus = 0; //Get Current Boot Counter nStatus = getBootCounter(chFilename, chEngineId, snmpEngineBoots); if ( nStatus != SNMPv3_OK && nStatus < SNMPv3_FILEOPEN_ERROR ) { return 1; } //Add Boot Counter snmpEngineBoots ++; //Save Boot Counter In File nStatus = saveBootCounter(chFilename, chEngineId, snmpEngineBoots); if (nStatus != SNMPv3_OK) {//Save File Failed return 1; } //Construct Status int construct_status; //Create v3MP Class By Engine ID and Boot Counter, return Result into //Construct status v3MP *v3_MP = new v3MP(chEngineId, snmpEngineBoots, construct_status); if(v3_MP) { //Get v3MP Property (Point to USM Class) USM *usm = v3_MP->get_usm(); //Set USM Discovery Mode usm->set_discovery_mode(); //Add Auth User , Auth Password and Private Password usm->add_usm_user(m_szSecurityName, m_lAuthProtocol, m_lPrivProtocol, m_szAuthPassword, m_szPrivPassword); //Return Status delete v3_MP; } return 0; }
Agent::Agent() : mMib( 0 ) , mReqList( 0 ) , mSnmp( 0 ) , mv3mp( 0 ) , mSignal(0) , mRunning( false ) , mMibModules() { for( size_t i = 0; i < (lengthof(moduleInfoFuncs) - 1); ++i ) { MibModule *modInfo = moduleInfoFuncs[i](); mMibModules.push_back( modInfo ); if( !modInfo->InitModule() ) { LOG_BEGIN(loggerModuleName, ERROR_LOG | 0); LOG("Agent::Init(): mibs module initialization failed at (index)"); LOG(i); LOG_END; exit(1); } } int status; Snmp::socket_startup(); // Initialize socket subsystem if( Config::getInstance().getListenOn().empty() ) mSnmp = new Snmpx(status, Config::getInstance().getPort()); else mSnmp = new Snmpx(status, UdpAddress( Config::getInstance().getListenOn().c_str() ) ); if( !mSnmp ) { LOG_BEGIN(loggerModuleName, ERROR_LOG | 0); LOG("Agent::Init(): Error allocating Snmpx"); LOG(status); LOG_END; exit(1); } if (status == SNMP_CLASS_SUCCESS) { LOG_BEGIN(loggerModuleName, EVENT_LOG | 1); LOG("Agent::Init(): SNMP listen port"); LOG(Config::getInstance().getPort()); LOG_END; } else { LOG_BEGIN(loggerModuleName, ERROR_LOG | 0); LOG("Agent::Init(): SNMP port init failed"); LOG(status); LOG_END; delete mSnmp; mSnmp = 0; exit(1); } unsigned int snmpEngineBoots = 0; OctetStr engineId(SnmpEngineID::create_engine_id(Config::getInstance().getPort())); LOG_BEGIN(loggerModuleName, DEBUG_LOG | 1 ); LOG("status file name"); LOG(Config::getInstance().getStatusFileName().c_str()); LOG_END; // you may use your own methods to load/store this counter status = getBootCounter(Config::getInstance().getStatusFileName().c_str(), engineId, snmpEngineBoots); if ((status != SNMPv3_OK) && (status < SNMPv3_FILEOPEN_ERROR)) { LOG_BEGIN(loggerModuleName, ERROR_LOG | 0); LOG("Agent::Init(): Error loading snmpEngineBoots counter (status)"); LOG(status); LOG_END; exit(1); } snmpEngineBoots++; status = saveBootCounter(Config::getInstance().getStatusFileName().c_str(), engineId, snmpEngineBoots); if (status != SNMPv3_OK) { LOG_BEGIN(loggerModuleName, ERROR_LOG | 0); LOG("Agent::Init(): Error saving snmpEngineBoots counter (status)"); LOG(status); LOG_END; exit(1); } int stat; mv3mp = new v3MP(engineId, snmpEngineBoots, stat); if( !mv3mp ) { LOG_BEGIN(loggerModuleName, ERROR_LOG | 0); LOG("Agent::Init(): Error allocating v3MP"); LOG(status); LOG_END; delete mSnmp; mSnmp = 0; exit(1); } mMib = new Mib(); if( !mMib ) { LOG_BEGIN(loggerModuleName, ERROR_LOG | 0); LOG("Agent::Init(): Error allocating Mib"); LOG(status); LOG_END; delete mSnmp; mSnmp = 0; delete mv3mp; mv3mp = 0; exit(1); } mReqList = new RequestList(); if( !mMib ) { LOG_BEGIN(loggerModuleName, ERROR_LOG | 0); LOG("Agent::Init(): Error allocating RequestList"); LOG(status); LOG_END; delete mMib; mMib = 0; delete mSnmp; mSnmp = 0; delete mv3mp; mv3mp = 0; exit(1); } // register v3MP mReqList->set_v3mp(mv3mp); // register requestList for outgoing requests mMib->set_request_list(mReqList); }