Class: Net::SNMP::OID
- Inherits:
-
Object
- Object
- Net::SNMP::OID
- Extended by:
- Debug
- Includes:
- Debug
- Defined in:
- lib/net/snmp/oid.rb
Instance Attribute Summary collapse
-
#length_pointer ⇒ Object
readonly
Returns the value of attribute length_pointer.
-
#oid ⇒ Object
readonly
Returns the value of attribute oid.
-
#pointer ⇒ Object
readonly
Returns the value of attribute pointer.
Class Method Summary collapse
- .determine_oid_size ⇒ Object
- .from_pointer(ptr, sub_id_count) ⇒ Object
- .oid_size ⇒ Object
- .read_pointer(pointer, sub_id_count) ⇒ Object
Instance Method Summary collapse
- #<=>(o) ⇒ Object
- #_packed ⇒ Object
-
#index ⇒ Object
The instance index string Note that some MIB nodes specify the instance implicitly, like sysUpTimeInstance.
-
#initialize(oid) ⇒ OID
constructor
A new instance of OID.
-
#label ⇒ Object
The label for the this OID.
- #length ⇒ Object
- #name ⇒ Object
-
#node ⇒ Object
Gets the MIB node corresponding to this OID.
- #parent_of?(o) ⇒ Boolean
- #size ⇒ Object
- #to_s ⇒ Object
- #write_to_buffer(buffer) ⇒ Object
Methods included from Debug
Constructor Details
#initialize(oid) ⇒ OID
Returns a new instance of OID.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/net/snmp/oid.rb', line 59 def initialize(oid) @oid = oid @pointer = FFI::MemoryPointer.new(Net::SNMP::OID.oid_size * Constants::MAX_OID_LEN) @length_pointer = FFI::MemoryPointer.new(:size_t) @length_pointer.write_int(Constants::MAX_OID_LEN) if @oid =~ /^[\d\.]*$/ if Wrapper.read_objid(@oid, @pointer, @length_pointer) == 0 Wrapper.snmp_perror(@oid) end else if Wrapper.get_node(@oid, @pointer, @length_pointer) == 0 raise "No such node: #{oid}" end @oid = to_s end end |
Instance Attribute Details
#length_pointer ⇒ Object (readonly)
Returns the value of attribute length_pointer.
7 8 9 |
# File 'lib/net/snmp/oid.rb', line 7 def length_pointer @length_pointer end |
#oid ⇒ Object (readonly)
Returns the value of attribute oid.
7 8 9 |
# File 'lib/net/snmp/oid.rb', line 7 def oid @oid end |
#pointer ⇒ Object (readonly)
Returns the value of attribute pointer.
7 8 9 |
# File 'lib/net/snmp/oid.rb', line 7 def pointer @pointer end |
Class Method Details
.determine_oid_size ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/net/snmp/oid.rb', line 22 def self.determine_oid_size if Net::SNMP.initialized? oid_ptr = FFI::MemoryPointer.new(:ulong, 8) length_ptr = FFI::MemoryPointer.new(:size_t, 1) length_ptr.write_int(oid_ptr.total) Wrapper.read_objid('1.1', oid_ptr, length_ptr) oid_str = oid_ptr.read_array_of_uint8(oid_ptr.total).map { |byte| byte.to_s(2).rjust(8, '0') }.join('') @oid_size = (oid_str[/10*1/].length - 1) / 8 else @oid_size = FFI::MemoryPointer.new(:ulong).total warn "SNMP not initialized\n" + " Cannot determine OID sub-id size, assuming common case of sizeof(ulong)\n On this platform, sizeof(ulong) = \#{@oid_size} bytes\n To avoid this warning, call `Net::SNMP.init`\n WARNING\n end\nend\n" |
.from_pointer(ptr, sub_id_count) ⇒ Object
11 12 13 |
# File 'lib/net/snmp/oid.rb', line 11 def self.from_pointer(ptr, sub_id_count) OID.new(OID.read_pointer(ptr, sub_id_count)) end |
.oid_size ⇒ Object
15 16 17 18 19 20 |
# File 'lib/net/snmp/oid.rb', line 15 def self.oid_size unless @oid_size determine_oid_size end @oid_size end |
.read_pointer(pointer, sub_id_count) ⇒ Object
44 45 46 47 48 49 |
# File 'lib/net/snmp/oid.rb', line 44 def self.read_pointer(pointer, sub_id_count) unless @sub_id_bit_width @sub_id_bit_width = OID.oid_size * 8 end pointer.send("read_array_of_uint#{@sub_id_bit_width}", sub_id_count).join('.') end |
Instance Method Details
#<=>(o) ⇒ Object
119 120 121 122 123 |
# File 'lib/net/snmp/oid.rb', line 119 def <=>(o) a = self._packed b = o._packed a <=> b end |
#_packed ⇒ Object
125 126 127 128 129 130 |
# File 'lib/net/snmp/oid.rb', line 125 def _packed i = self.to_s.dup i.sub!(/^\./,'') i.gsub!(/ /, '.0') i.replace(i.split('.').map(&:to_i).pack('N*')) end |
#index ⇒ Object
The instance index string Note that some MIB nodes specify the instance implicitly, like sysUpTimeInstance. So, this may be an empty string.
107 108 109 110 111 112 |
# File 'lib/net/snmp/oid.rb', line 107 def index # Strip the name index = oid.sub(node.oid.name, '') # Strip any leading dot index.sub(/^\./, '') end |
#label ⇒ Object
The label for the this OID. Includes any instance indexes.
115 116 117 |
# File 'lib/net/snmp/oid.rb', line 115 def label "#{node.label}#{index.length > 0 ? "." + index : ""}" end |
#length ⇒ Object
80 81 82 |
# File 'lib/net/snmp/oid.rb', line 80 def length @length_pointer.read_int end |
#name ⇒ Object
88 89 90 |
# File 'lib/net/snmp/oid.rb', line 88 def name @oid end |
#node ⇒ Object
Gets the MIB node corresponding to this OID. Note that if this OID represents a MIB node, like ‘1.3’, then ‘oid.to_s == oid.node.oid.to_s`. However, if there are indices on this oid, then `oid.to_s.start_with?(oid.node.oid.to_s)`
100 101 102 |
# File 'lib/net/snmp/oid.rb', line 100 def node MIB::Node.get_node(oid) end |
#parent_of?(o) ⇒ Boolean
132 133 134 |
# File 'lib/net/snmp/oid.rb', line 132 def parent_of?(o) o.to_s =~ /^#{self.to_s}\./ end |
#size ⇒ Object
76 77 78 |
# File 'lib/net/snmp/oid.rb', line 76 def size @length_pointer.read_int * Net::SNMP::OID.oid_size end |
#to_s ⇒ Object
92 93 94 |
# File 'lib/net/snmp/oid.rb', line 92 def to_s OID.read_pointer(@pointer, length) end |
#write_to_buffer(buffer) ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/net/snmp/oid.rb', line 51 def write_to_buffer(buffer) unless @sub_id_bit_width @sub_id_bit_width = OID.oid_size * 8 end subids = self.to_s.split('.').map{ |subid| subid.to_i } buffer.send("write_array_of_uint#{@sub_id_bit_width}", subids) end |