Class: Net::SNMP::OID
- Inherits:
-
Object
show all
- Extended by:
- Debug
- Includes:
- Debug
- Defined in:
- lib/net/snmp/oid.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Debug
debug, error, fatal, info, print_packet, time, warn
Constructor Details
#initialize(oid) ⇒ OID
Returns a new instance of OID.
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/net/snmp/oid.rb', line 56
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
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
Returns the value of attribute oid.
7
8
9
|
# File 'lib/net/snmp/oid.rb', line 7
def oid
@oid
end
|
#pointer ⇒ Object
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
|
# 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" + <<-WARNING
Cannot determine OID sub-id size, assuming common case of sizeof(ulong)
On this platform, sizeof(ulong) = #{@oid_size} bytes
To avoid this warning, call `Net::SNMP.init`
WARNING
end
end
|
.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
42
43
44
45
46
47
|
# File 'lib/net/snmp/oid.rb', line 42
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
116
117
118
119
120
|
# File 'lib/net/snmp/oid.rb', line 116
def <=>(o)
a = self._packed
b = o._packed
a <=> b
end
|
#_packed ⇒ Object
122
123
124
125
126
127
|
# File 'lib/net/snmp/oid.rb', line 122
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.
104
105
106
107
108
109
|
# File 'lib/net/snmp/oid.rb', line 104
def index
index = oid.sub(node.oid.name, '')
index.sub(/^\./, '')
end
|
#label ⇒ Object
The label for the this OID. Includes any instance indexes.
112
113
114
|
# File 'lib/net/snmp/oid.rb', line 112
def label
"#{node.label}#{index.length > 0 ? "." + index : ""}"
end
|
#length ⇒ Object
77
78
79
|
# File 'lib/net/snmp/oid.rb', line 77
def length
@length_pointer.read_int
end
|
#name ⇒ Object
85
86
87
|
# File 'lib/net/snmp/oid.rb', line 85
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)`
97
98
99
|
# File 'lib/net/snmp/oid.rb', line 97
def node
MIB::Node.get_node(oid)
end
|
#parent_of?(o) ⇒ Boolean
129
130
131
|
# File 'lib/net/snmp/oid.rb', line 129
def parent_of?(o)
o.to_s =~ /^#{self.to_s}\./
end
|
#size ⇒ Object
73
74
75
|
# File 'lib/net/snmp/oid.rb', line 73
def size
@length_pointer.read_int * Net::SNMP::OID.oid_size
end
|
#to_s ⇒ Object
89
90
91
|
# File 'lib/net/snmp/oid.rb', line 89
def to_s
OID.read_pointer(@pointer, length)
end
|
#write_to_buffer(buffer) ⇒ Object
49
50
51
52
53
54
|
# File 'lib/net/snmp/oid.rb', line 49
def write_to_buffer(buffer)
unless @sub_id_bit_width
@sub_id_bit_width = OID.oid_size * 8
end
buffer.send("write_array_of_uint#{@sub_id_bit_width}", self.to_s.split('.').map{ |subid| subid.to_i })
end
|