# # this file defines some utilities for printing various structures # found in the net-snmp source code. You can source it from within # gdb and then use it to print variable chains, oids, etc directly # from memory. # # as an example, consider the variables: # # oid *name; # size_t name_len; # # normally display oids is difficult under gdb, and the best you can # do is to use x/12dw name or so to print the first 12 numbers of the # oid array. however, with this file you can now use: # # gdb> printoid name_len name # .1.3.6.1.2.1.1.0 # # which will print oids in a more readable fashion. etc... # define initme set $varindent = "" end define hookpost-run initme end define printvarval printf "value: " if $arg0->type == 2 printf "int: %d\n", $arg0->val.integer end if $arg0->type == 4 printf "string: %s\n", $arg0->val.string end if $arg0->type == 5 printf "ASN NULL\n" end if $arg0->type == 6 printoid (($arg0->val_len)/sizeof(oid)) $arg0->val.objid end if $arg0->type == 128 printf "NO SUCH NAME\n" end if $arg0->type == 129 printf "NO SUCH INSTANCE\n" end if $arg0->type == 130 printf "END OF MIB VIEW\n" end if $arg0->type == 194 printf "AGENTX INCL RANGE: " printoid (($arg0->val_len)/sizeof(oid)) $arg0->val.objid end if $arg0->type == 195 printf "AGENTX EXCL RANGE: " printoid (($arg0->val_len)/sizeof(oid)) $arg0->val.objid end end document printvarval printvarval VARPTR prints the value part of a net-snmp "struct variable". This is called from inside printvar. end define printvar printf "%stype: %d\n", $varindent, $arg0->type printf "%soid: ", $varindent printoid $arg0->name_length $arg0->name printf "%s", $varindent printvarval $arg0 end document printvar printvar VARPTR prints the variable information contained in a net-snmp struct variable. printvarval POINTER will print it's oid, value type and value contents end define printvars set $tmpcount = 1 set $tmpvar = $arg0 set $varindent = " " while $tmpvar != 0 printf "VARIABLE #%d\n", $tmpcount printvar $tmpvar set $tmpvar = $tmpvar->next_variable set $tmpcount = $tmpcount + 1 end set $varindent = "" end document printvars printvars VARPTR calls printvar repeatedly on a chain of variables, displaying all the variables in a net-snmp struct variable chain. end define printoid set $printoid_tmp = 0 while $printoid_tmp < $arg0 printf ".%d", $arg1[$printoid_tmp] set $printoid_tmp = $printoid_tmp + 1 end printf "\n" end document printoid printoid LENGTH OIDPTR prints an oid (.x.y.z...) given it's length and a pointer. end define poid printoid $arg0_len $arg0 end document poid poid NAME shorthand for 'printoid NAME_len NAME" end define poidl printoid $arg0_length $arg0 end document poidl poid NAME shorthand for 'printoid NAME_length NAME" end define printindex printoid $arg0->len $arg0->oids end document printindex printindex NETSNMP_INDEX_PTR prints the OID contained in a netsnmp_index struct variable. end