[tkined] Problem with SNMP table row creation with small timeouts

Peter Soares (psoares@nortel.ca)
14 Jul 1998 11:52 EDT

Receiving odd responses to synchronous queries when timeout is set to
a low value (3 seconds). I run a small script which makes 5 request
to an SNMP emulator. The first two add rows to an SNMP table while the
remaining request get the sysObjectID value. The problem appears to be
responses from retries are matched to later requests sent after the
original request. This behaviour may only occur with SNMP table
row creation.

On a sun Ultra
Get the following results: (timeout = 3, retries = 2)
result1 (table add 26) = noResponse

result2 (table add 27) = badValue 1 \
{1.3.6.1.2.1.37.1.5.1.9.26 INTEGER createAndGo} ...
[cut other columns]

result3 = badValue 1 {1.3.6.1.2.1.37.1.5.1.9.26 INTEGER createAndGo} ...
[cut other columns]

result4 = noResponse

result5 = badValue 1 {1.3.6.1.2.1.37.1.5.1.9.27 INTEGER createAndGo} ...
[cut other columns]

It appears the first GetResponse arrives to late - so the
noResponse. No problem so far. However the badValue response
to one of the retries has been associated with the second
request (see tcpdump output below). If I set the timeout to 30
seconds everything works fine. The problem is under congestion
I have no idea how to select a timeout to avoid this.

The rows have been added by the agent. Can confirm with
snmp3 get 1.3.6.1.2.1.37.1.5.1.9.26
{1.3.6.1.2.1.37.1.5.1.9.26 INTEGER active}

Should I always use async queries or am I doing some else wrong?
Is is possible to get the Request Id when sync. requests are
made? The script used follows:

set sessionID [snmp session -address 200.100.100.5 \
-community private -timeout 3 -retries 2]
set column 28
set nextColumn [expr $column + 1]
catch {eval [subst {$sessionID set {{atmTrafficDescrRowStatus.${column} \
createAndGo} \
{atmTrafficDescrType.${column} atmNoTrafficDescriptor} \
{atmTrafficDescrParam1.${column} 0} \
{atmTrafficDescrParam2.${column} 0} \
{atmTrafficDescrParam3.${column} 0} \
{atmTrafficDescrParam4.${column} 0} \
{atmTrafficDescrParam5.${column} 0} \
{atmTrafficQoSClass.${column} 0}}}]} result1
catch {eval [subst {$sessionID set {{atmTrafficDescrRowStatus.${nextColumn} \
createAndGo} \
{atmTrafficDescrType.${nextColumn} atmNoTrafficDescriptor} \
{atmTrafficDescrParam1.${nextColumn} 0} \
{atmTrafficDescrParam2.${nextColumn} 0} \
{atmTrafficDescrParam3.${nextColumn} 0} \
{atmTrafficDescrParam4.${nextColumn} 0} \
{atmTrafficDescrParam5.${nextColumn} 0} \
{atmTrafficQoSClass.${nextColumn} 0}}}]} result2

catch {$sessionID get sysObjectID.0} result3
catch {$sessionID get sysObjectID.0} result4
catch {$sessionID get sysObjectID.0} result5

puts "result1 (table add $column) = $result1\n"
puts "result2 (table add $nextColumn) = $result2\n"
puts "result3 = $result3\n"
puts "result4 = $result4\n"
puts "result5 = $result5\n"

Running tcpdump give the following:
18:09:47.597097 bcars9de.34150 > 200.100.100.5.161: C=private
SetRequest(8)[|snmp]
18:09:48.595249 bcars9de.34150 > 200.100.100.5.161: C=private
SetRequest(8)[|snmp]
18:09:49.595471 bcars9de.34150 > 200.100.100.5.161: C=private
SetRequest(8)[|snmp]
18:09:50.609882 bcars9de.34150 > 200.100.100.5.161: C=private
SetRequest(8)[|snmp]
18:09:51.605893 bcars9de.34150 > 200.100.100.5.161: C=private
SetRequest(8)[|snmp]
18:09:52.191585 200.100.100.5.161 > bcars9de.34150: C=private
GetResponse(7)[|snmp]
18:09:52.199381 200.100.100.5.161 > bcars9de.34150: C=private
GetResponse(7) badValue[|snmp]
18:09:52.207558 200.100.100.5.161 > bcars9de.34150: C=private
GetResponse(7) badValue[|snmp]
18:09:52.224203 bcars9de.34150 > 200.100.100.5.161: C=private
GetRequest(10)[|snmp]
18:09:52.225314 bcars9de.34150 > 200.100.100.5.161: C=private
GetRequest(10)[|snmp]
18:09:53.216320 bcars9de.34150 > 200.100.100.5.161: C=private
GetRequest(10)[|snmp]
18:09:54.216537 bcars9de.34150 > 200.100.100.5.161: C=private
GetRequest(10)[|snmp]
18:09:55.217139 bcars9de.34150 > 200.100.100.5.161: C=private
GetRequest(10)[|snmp]
18:09:55.576287 200.100.100.5.161 > bcars9de.34150: C=private
GetResponse(7)[|snmp]
18:09:55.584458 200.100.100.5.161 > bcars9de.34150: C=private
GetResponse(7) badValue[|snmp]
18:09:55.588560 200.100.100.5.161 > bcars9de.34150: C=private
GetResponse(8)[|snmp]
18:09:55.592929 200.100.100.5.161 > bcars9de.34150: C=private
GetResponse(8)[|snmp]
18:09:55.597219 200.100.100.5.161 > bcars9de.34150: C=private
GetResponse(8)[|snmp]
18:09:55.601498 200.100.100.5.161 > bcars9de.34150: C=private
GetResponse(8)[|snmp]
18:09:55.605949 200.100.100.5.161 > bcars9de.34150: C=private
GetResponse(8)[|snmp]

Peter

--
!! This message is brought to you via the `tkined & scotty' mailing list.
!! Please do not reply to this message to unsubscribe. To subscribe or
!! unsubscribe, send a mail message to <tkined-request@ibr.cs.tu-bs.de>.
!! See http://wwwsnmp.cs.utwente.nl/~schoenw/scotty/ for more information.