Пример #1
0
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;
}
Пример #2
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);
}