2016-06-14 4 views
1

Ich schreibe eine getBulkRequest-Funktion, die es mir ermöglichen soll, eine Liste von Informationen auf einmal anzufordern.Schreiben einer getBulkRequest-Funktion mit SNMPv2 und C++

Für jetzt möchte ich etwas Einfaches tun, mit dem GetBulkRequest sequentiell getNextRequest nur durch Setzen der "Non-Repetition" auf "0" in getBulkRequest.

  • Ich schreibe das Format richtig?
  • Für die OID, muss ich nur ONE Oid (das erste Element der Bulk) eingeben?
  • Wenn ich eine Bulk-Anfrage ab dem angegebenen Oid und die folgenden 4 Items nach dem ersten bekommen möchte, setze ich einfach die "Max-Repetition" auf 5?

Dies ist das Format, das ich verwende, könnte mir jemand raten, ob ich es richtig oder nicht tue:

switch(pdyType) { 
case PdyType::GET_BULK_REQUEST: 
for (QStringList::ConstIterator iter = oids.begin(); iter != oids.end(); ++iter) 
{ 

    QByteArray keyHolder; 

    //value 
    keyHolder.push_front(QByteArray(1, 0x00)); 
    keyHolder.push_front(QByteArray(1, DataType::DATA_NULL)); 

    //object identifier 
    QByteArray temp = encodeoid(*iter); 
    keyHolder.push_front(temp); 
    keyHolder.push_front(encodeLengthField(temp.size())); 
    keyHolder.push_front(QByteArray(1, DataType::OBJECT_ID)); 

    //varbind 
    keyHolder.push_front(encodeLengthField(keyHolder.size())); 
    keyHolder.push_front(QByteArray(1, DataType::SEQUENCE)); 

    datagram.push_front(keyHolder); 
} 

//max-repetitions 
datagram.push_front(QByteArray(1, 5); 
datagram.push_front(QByteArray(1, 1); 
datagram.push_front(QByteArray(1, DataType::INTEGER); 

//varbind list 
datagram.push_front(QByteArray(encodeLengthField(datagram.size()); 
datagram.push_front(QByteArray(1, DataType::SEQUENCE); 

//non-repeaters 
datagram.push_front(QByteArray(1, 0); 
datagram.push_front(QByteArray(1, 1); 
datagram.push_front(QByteArray(1, DataType::INTEGER); 

//requestId 
datagram.push_front(QByteArray(1, requestId)); 
datagram.push_front(QByteArray(1, 1); 
datagram.push_front(QByteArray(1, DataType::INTEGER); 

//pdu 
datagram.push_front(QByteArray(encodeLengthField(datagram.size())); 
datagram.push_front(QByteArray(1, (unsigned char)pduType); 

//community string 
datagram.push_front(QByteArray(community.toLocal8Bit())); 
datagram.push_front(QByteArray(encodeLengthField(community.size()); 
datagram.push_front(QByteArray(1, DataType::OCTET_STRING); 

//version 
datagram.push_front(QByteArray(1, 0)); 
datagram.push_front(QByteArray(1, 1); 
datagram.push_front(QByteArray(1, DataType::INTEGER); 

//message type 
datagram.push_front(QByteArray(encodeLengthField(datagram.size())); 
datagram.push_front(QByteArray(1, DataType::SEQUENCE); 
break; 


default: 
break; 
} 
return datagram; 

Ist das Format korrekt für GetBulkRequest über QUdpSocket angegeben werden: : writeDatagram?

Ich hoffe, ich bin in der Lage, mein Problem klar zu formulieren. Da ich mir nicht sicher bin, was gerade los ist und versuche mehr zu lesen.

+0

Irgendwelche Ratschläge/Vorschläge? Hilfe benötigt. – Cherple

Antwort

0

Frage: Muss ich für OID nur ONE Oid (das erste Element des Bulk) eingeben?

A: Ja, Sie müssen nur die erste OID einstellen.

F: Wenn ich eine Bulk-Anfrage ab dem angegebenen Oid und die folgenden 4 Elemente nach dem ersten bekommen möchte, setze ich einfach die "Max-Repetition" auf 5?

A: Ja. 5 ist das Minimum, das Sie für die Maximalwiederholung einstellen müssen, Sie können jedoch einen größeren Wert (z. B. 10) festlegen. Die Art und Weise, wie Sie mit der Antwort arbeiten würden, besteht darin, über die Antwort-PDU zu gehen und jede OID auf einmal herauszuholen.

Hoffe diese Hilfe.

Verwandte Themen