net-snmp & C++
От: prog_nt  
Дата: 29.07.11 06:53
Оценка:
Добрый всем. Активно использую net-snmp в своем проекте (уравление сетью). Проект на c++, поэтому пришлось писать обертку для net-snmp на c++ (готовых не нашел). Кое какие наработки по враперу есть, синхронные get, walk, bulkwalk, set, на днях начал тестить асинхронный bulkwalk (результаты, для меня, поразительные по скорости опросов). Вопрос собсно в том, что хочется поделиться наработками. Хз нужна еще кому то эта функциональность или нет, если нет то по тихому продолжу сам. Может кто-то пишет что-то подобное, можно скооперироваться и т.д.

з.ы. шарить код пока нет желания, ибо стыдно)) сначала хочется получить рекомендации, исправить глупости и т.д.
как-то так)
примеры использования

bool Equipment_managed::getSysUpTime()
{
    Snmp snmp(ip_address_, "public");

    if (!snmp.get(".1.3.6.1.2.1.1.3.0", m_sysUpTime)){
        m_log.back() += "ERROR";
        return false;
    }

    return true;
}
bool DES_30xx::setVlan(const Vlan &vlan, bool)
{
    m_log.push_back("Setting vlan... ");
    
    Snmp snmp(ip_address_, "private");
    Oid dot1qVlanStaticName            = Oid(".1.3.6.1.2.1.17.7.1.4.3.1.1") + vlan.tag();
    Oid dot1qVlanStaticEgressPorts        = Oid(".1.3.6.1.2.1.17.7.1.4.3.1.2") + vlan.tag();
    Oid dot1qVlanForbiddenEgressPorts    = Oid(".1.3.6.1.2.1.17.7.1.4.3.1.3") + vlan.tag();
    Oid dot1qVlanStaticUntaggedPorts    = Oid(".1.3.6.1.2.1.17.7.1.4.3.1.4") + vlan.tag();
    Oid dot1qVlanStaticRowStatus        = Oid(".1.3.6.1.2.1.17.7.1.4.3.1.5") + vlan.tag();

    if (vlans().exist(vlan.tag())){
        // существует
        Variables modifyVlan;
        modifyVlan.add(dot1qVlanStaticName + vlan.tag(), vlan.name());
        modifyVlan.add(dot1qVlanStaticEgressPorts, vlan.ports(portTagged));
        modifyVlan.add(dot1qVlanStaticUntaggedPorts + tag;
        modifyVlan.add(dot1qVlanStaticRowStatus + vlan.tag(), 4);
        if (!snmp.set(modifyVlan)){
            m_log.back() += "ERROR: cannot modify vlan";
            return false;
        }
    } else {
        // не существует
        Variables createVlan;
        createVlan.add(dot1qVlanStaticName, vlan.name());
        createVlan.add(dot1qVlanStaticEgressPorts, vlan.portMask(portTagged, 32));
        createVlan.add(dot1qVlanForbiddenEgressPorts;
        createVlan.add(dot1qVlanStaticRowStatus, 4); // create
        if (!snmp.set(createVlan)){
            m_log.back() += "ERROR: cannot create vlan";
            return false;
        }
    }
    m_log.back() += "OK";
    return true;
}
net-snmp c++
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.