2016-06-14 1 views
1

저는 한 번에 정보 목록을 요청할 수있는 getBulkRequest 함수를 작성하고 있습니다.SNMPv2 및 C++을 사용하여 getBulkRequest 함수 작성

지금은 getBulkRequest에서 "Non-Repetition"을 "0"으로 설정하여 GetBulkRequest를 사용하여 순차적으로 getNextRequest를 사용하여 간단한 작업을 수행하려고합니다.

  • 형식을 올바르게 쓰고 있습니까?
  • Oid의 경우 OID (벌크의 첫 번째 항목) 만 입력하면됩니까?
  • 내가 명시된 Oid부터 시작하여 대량 요청을 받고 첫 번째 요청 이후 4 개 항목을 원한다면 "Max-Repetition"을 5로 간단하게 설정합니까?

    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; 
    

    이 QUdpSocket를 통해 제시 될 getBulkRequest에 대한 올바른 형식입니다 :

사람은 내가 오른쪽이나하지 그 일을하고 있는지에 저를 조언 할 수, 내가 사용하고있는 형식입니다 : : writeDatagram?

나는 내 문제를 명확하게 표현할 수 있기를 바랍니다. 나는 그 순간에 무슨 일이 일어나고 있는지, 그리고 더 많이 읽으려고하는지 잘 모르겠다.

+0

조언이 나 도움이 되었습니까? 도움이 필요하다. – Cherple

답변

0

Q : Oid의 경우 OID (Bulk의 첫 번째 항목) 만 입력하면됩니까?

A : 예, 첫 번째 OID 만 설정하면됩니다.

Q : 명시된 Oid부터 시작하여 대량 요청을 받고 싶습니다. 첫 번째 요청 이후에 다음 4 개 항목을 요청하려면 '최대 반복 횟수'를 5로 설정하면됩니까?

대답 : 예. 5는 최대 반복에 대해 설정해야하는 최소값이지만 더 큰 값 (예 : 10)으로 설정할 수 있습니다. 응답을 처리하는 방법은 응답 PDU를 탐색하여 한 번에 각 OID를 가져 오는 것입니다.

희망 도움말.