Question

I am trying to retrieve some columns in an snmp table. Depending on the permissions of the agent, sometimes columns are not returned. When that happens, the OID of the next valid response is duplicated in the varBindTable.

Is there any marker or flat that shows that the row does not contain what I requested? My application expects the result to be the same as the input.

How is a programmer supposed to notice that something is wrong with the data.

Lets start with an example: This the high level synchronous version. I am grabbing a table where the number of rows and their indexes are not known in advance.

from pysnmp.entity.rfc3413.oneliner import cmdgen

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.nextCmd(
    cmdgen.CommunityData('public', mpModel=0),
    cmdgen.UdpTransportTarget(('demo.snmplabs.com', 161)),
    'somewhere.1',
    'somewhere.2,
    'somewhere.3,
)

Lets assume that 1 and 3 exist and 2 does not. Also lets assume that these are part of a table with indexes rows of 10 and 20. What should be in varBindTable?

[   ['somewhere.1', 'Result1'],
    ['somewhere.3', 'Result3'],
    ['somewhere.3', 'Result3'] ]

or

[   ['somewhere.1', 'Result1'],
    [None, None],
    ['somewhere.3', 'Result3'] ]

I get the first. It would be nice if I got the second. Whats the point of the duplicate garbage data?

Was it helpful?

Solution

When an OID is not available, agent skips it and proceeds with the next OID it has.

So if your Agent has, say, OIDs 1, 2 and 3 when access to all these OIDs is permitted, you request GETNEXT 1 and 2, you receive 2 and 3 in response. When access to OID 2 is denied, you request GETNEXT 1 and 2, you receive 3 and 3 (as 2 is skipped by Agent).

To prove this you could enable pysnmp debugging and see what OIDs are actually exchanged between your Manager and Agent.

To you are looking for a specific OID and want to see if it's available, just use GET request and Agent will either respond with a value or an error.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top