net-snmp 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/net/snmp/dispatcher.rb +5 -5
- data/lib/net/snmp/pdu.rb +2 -2
- data/lib/net/snmp/session.rb +18 -22
- data/lib/net/snmp/version.rb +1 -1
- data/spec/trap_spec.rb +31 -0
- metadata +4 -2
data/lib/net/snmp/dispatcher.rb
CHANGED
@@ -46,7 +46,7 @@ class Net::SNMP::Dispatcher
|
|
46
46
|
|
47
47
|
|
48
48
|
def poll(timeout = nil)
|
49
|
-
puts "Dispatcher.poll #{Net::SNMP::Session.sessions.size}"
|
49
|
+
#puts "Dispatcher.poll #{Net::SNMP::Session.sessions.size}"
|
50
50
|
total = 0
|
51
51
|
t = timeout
|
52
52
|
t = nil if t == false
|
@@ -54,7 +54,7 @@ class Net::SNMP::Dispatcher
|
|
54
54
|
loop do
|
55
55
|
Net::SNMP::Session.lock.synchronize {
|
56
56
|
Net::SNMP::Session.sessions.each do |k, sess|
|
57
|
-
puts "polling session"
|
57
|
+
#puts "polling session"
|
58
58
|
total += sess.poll(t)
|
59
59
|
end
|
60
60
|
}
|
@@ -62,7 +62,7 @@ class Net::SNMP::Dispatcher
|
|
62
62
|
throw :got_data unless timeout == false
|
63
63
|
end
|
64
64
|
end
|
65
|
-
puts "Done Dispatcher.poll"
|
65
|
+
#puts "Done Dispatcher.poll"
|
66
66
|
total
|
67
67
|
end
|
68
68
|
|
@@ -81,9 +81,9 @@ class Net::SNMP::Dispatcher
|
|
81
81
|
sleep_time = options[:sleep] || 0.1
|
82
82
|
Thread.new do
|
83
83
|
loop do
|
84
|
-
puts "polling"
|
84
|
+
#puts "polling"
|
85
85
|
num_ready = poll(timeout)
|
86
|
-
puts "num_ready = #{num_ready}"
|
86
|
+
#puts "num_ready = #{num_ready}"
|
87
87
|
if num_ready == 0
|
88
88
|
sleep(sleep_time) if sleep_time
|
89
89
|
end
|
data/lib/net/snmp/pdu.rb
CHANGED
@@ -39,7 +39,7 @@ module Net
|
|
39
39
|
@struct.errindex
|
40
40
|
end
|
41
41
|
def enterprise=(e_oid)
|
42
|
-
@enterprise =
|
42
|
+
@enterprise = e_oid
|
43
43
|
@struct.enterprise = e_oid.pointer
|
44
44
|
@struct.enterprise_length = e_oid.size
|
45
45
|
end
|
@@ -92,8 +92,8 @@ module Net
|
|
92
92
|
value = value.pointer
|
93
93
|
end
|
94
94
|
|
95
|
+
#oid = options[:oid].kind_of?(Net::SNMP::OID) ? options[:oid] : Net::SNMP::OID.new(options[:oid])
|
95
96
|
oid = Net::SNMP::OID.new(options[:oid])
|
96
|
-
|
97
97
|
var_ptr = Wrapper.snmp_pdu_add_variable(@struct.pointer, oid.pointer, oid.length_pointer.read_int, options[:type], value, value_len)
|
98
98
|
varbind = Varbind.new(var_ptr)
|
99
99
|
#Wrapper.print_varbind(varbind.struct)
|
data/lib/net/snmp/session.rb
CHANGED
@@ -15,14 +15,14 @@ module Net
|
|
15
15
|
class << self
|
16
16
|
attr_accessor :sessions, :lock
|
17
17
|
def open(options = {})
|
18
|
-
puts "building session"
|
18
|
+
#puts "building session"
|
19
19
|
session = new(options)
|
20
20
|
@lock.synchronize {
|
21
21
|
@sessions[session.sessid] = session
|
22
22
|
}
|
23
|
-
puts "done building"
|
23
|
+
#puts "done building"
|
24
24
|
if block_given?
|
25
|
-
puts "calling block"
|
25
|
+
#puts "calling block"
|
26
26
|
yield session
|
27
27
|
|
28
28
|
end
|
@@ -31,7 +31,7 @@ module Net
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def initialize(options = {})
|
34
|
-
puts "in initialize"
|
34
|
+
#puts "in initialize"
|
35
35
|
@requests = {}
|
36
36
|
@peername = options[:peername] || 'localhost'
|
37
37
|
@community = options[:community] || "public"
|
@@ -64,7 +64,6 @@ module Net
|
|
64
64
|
if options[:retries]
|
65
65
|
@sess.retries = options[:retries]
|
66
66
|
end
|
67
|
-
puts "1"
|
68
67
|
if @sess.version == Constants::SNMP_VERSION_3
|
69
68
|
@sess.securityLevel = options[:security_level] || Constants::SNMP_SEC_LEVEL_NOAUTH
|
70
69
|
|
@@ -97,24 +96,19 @@ module Net
|
|
97
96
|
Wrapper.snmp_perror("netsnmp")
|
98
97
|
end
|
99
98
|
end
|
100
|
-
puts "2"
|
101
99
|
# General callback just takes the pdu, calls the session callback if any, then the request specific callback.
|
102
100
|
@sess.callback = lambda do |operation, session, reqid, pdu_ptr, magic|
|
103
101
|
#puts "callback is #{callback.inspect}"
|
104
102
|
#callback.call(operation, reqid, pdu, magic) if callback
|
105
103
|
|
106
|
-
puts "in main callback"
|
107
104
|
if @requests[reqid]
|
108
|
-
puts "got request"
|
109
105
|
pdu = Net::SNMP::PDU.new(pdu_ptr)
|
110
106
|
@requests[reqid].call(pdu)
|
111
107
|
@requests.delete(reqid)
|
112
108
|
end
|
113
109
|
0
|
114
110
|
end
|
115
|
-
puts "3"
|
116
111
|
@struct = Wrapper.snmp_sess_open(@sess.pointer)
|
117
|
-
puts "4"
|
118
112
|
#@handle = Wrapper.snmp_sess_open(@sess.pointer)
|
119
113
|
#@struct = Wrapper.snmp_sess_session(@handle)
|
120
114
|
end
|
@@ -149,7 +143,6 @@ module Net
|
|
149
143
|
pdu = Net::SNMP::PDU.new(Constants::SNMP_MSG_GETBULK)
|
150
144
|
oidlist = [oidlist] unless oidlist.kind_of?(Array)
|
151
145
|
oidlist.each do |oid|
|
152
|
-
puts "adding #{oid.inspect}"
|
153
146
|
pdu.add_varbind(:oid => oid)
|
154
147
|
end
|
155
148
|
pdu.non_repeaters = options[:non_repeaters] || 0
|
@@ -186,7 +179,6 @@ module Net
|
|
186
179
|
results = []
|
187
180
|
|
188
181
|
first_result = get_next(column_names)
|
189
|
-
puts "got first result #{first_result.inspect}"
|
190
182
|
oidlist = []
|
191
183
|
good_column_names = []
|
192
184
|
row = {}
|
@@ -203,7 +195,6 @@ module Net
|
|
203
195
|
|
204
196
|
catch :break_main_loop do
|
205
197
|
while(result = get_next(oidlist))
|
206
|
-
puts "got result #{result.inspect}"
|
207
198
|
oidlist = []
|
208
199
|
row = {}
|
209
200
|
result.varbinds.each_with_index do |vb, idx|
|
@@ -258,24 +249,24 @@ module Net
|
|
258
249
|
pdu.specific_type = options[:specific_type] || 0
|
259
250
|
pdu.time = 1 # put what here?
|
260
251
|
send_pdu(pdu)
|
252
|
+
true
|
261
253
|
end
|
262
254
|
|
263
255
|
|
264
256
|
def trap_v2(options = {})
|
265
257
|
pdu = PDU.new(Constants::SNMP_MSG_TRAP2)
|
266
|
-
build_trap_pdu(options)
|
258
|
+
build_trap_pdu(pdu, options)
|
267
259
|
send_pdu(pdu)
|
268
260
|
end
|
269
261
|
|
270
262
|
def inform(options = {}, &block)
|
271
263
|
pdu = PDU.new(Constants::SNMP_MSG_INFORM)
|
272
|
-
build_trap_pdu(options)
|
264
|
+
build_trap_pdu(pdu, options)
|
273
265
|
send_pdu(pdu, &block)
|
274
266
|
end
|
275
267
|
|
276
268
|
def poll(timeout = nil)
|
277
269
|
|
278
|
-
puts "IN POLL"
|
279
270
|
fdset = Net::SNMP::Wrapper.get_fd_set
|
280
271
|
num_fds = FFI::MemoryPointer.new(:int)
|
281
272
|
tv_sec = timeout ? timeout.round : 0
|
@@ -290,7 +281,6 @@ module Net
|
|
290
281
|
end
|
291
282
|
#puts "calling snmp_select_info"
|
292
283
|
num = Net::SNMP::Wrapper.snmp_sess_select_info(@struct, num_fds, fdset, tval.pointer, block )
|
293
|
-
puts "done snmp_select_info. #{num}"
|
294
284
|
num_ready = 0
|
295
285
|
#puts "block = #{block.read_int}"
|
296
286
|
|
@@ -302,9 +292,7 @@ module Net
|
|
302
292
|
#puts "tv = #{tv.inspect}"
|
303
293
|
#puts "calling select with #{num_fds.read_int}"
|
304
294
|
#num_ready = RubyWrapper.rb_thread_select(num_fds.read_int, fdset, nil, nil, tv)
|
305
|
-
puts "calling select"
|
306
295
|
num_ready = Net::SNMP::Wrapper.select(num_fds.read_int, fdset, nil, nil, tv)
|
307
|
-
puts "done select"
|
308
296
|
#puts "done select. num_ready = #{num_ready}"
|
309
297
|
if num_ready > 0
|
310
298
|
Net::SNMP::Wrapper.snmp_sess_read(@struct, fdset)
|
@@ -342,14 +330,22 @@ module Net
|
|
342
330
|
response_ptr = FFI::MemoryPointer.new(:pointer)
|
343
331
|
#Net::SNMP::Wrapper.print_session(@struct)
|
344
332
|
#Net::SNMP::Wrapper.print_pdu(pdu.struct)
|
345
|
-
|
346
|
-
|
333
|
+
#if pdu.command == Net::SNMP::Constants::SNMP_MSG_TRAP
|
334
|
+
# status = Net::SNMP::Wrapper.snmp_sess_send(@struct, pdu.pointer) == 1 ? 0 : 1
|
335
|
+
#else
|
336
|
+
status = Net::SNMP::Wrapper.snmp_sess_synch_response(@struct, pdu.pointer, response_ptr)
|
337
|
+
#end
|
347
338
|
#pdu.free #causing segfaults
|
348
339
|
if status != 0
|
349
340
|
error("snmp_get failed #{status}")
|
350
341
|
else
|
351
342
|
#Net::SNMP::Wrapper.print_pdu(Net::SNMP::Wrapper::SnmpPdu.new(response_ptr.read_pointer))
|
352
|
-
Net::SNMP::
|
343
|
+
#if pdu.command == Net::SNMP::Constants::SNMP_MSG_TRAP
|
344
|
+
Net::SNMP::PDU.new(response_ptr.read_pointer)
|
345
|
+
#else
|
346
|
+
# 1
|
347
|
+
#end
|
348
|
+
|
353
349
|
end
|
354
350
|
end
|
355
351
|
end
|
data/lib/net/snmp/version.rb
CHANGED
data/spec/trap_spec.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "snmp traps" do
|
4
|
+
it "should send a v1 trap" do
|
5
|
+
pending "still working on it"
|
6
|
+
Net::SNMP::Session.open(:peername => '127.0.0.1') do |sess|
|
7
|
+
res = sess.trap
|
8
|
+
res.should be_true
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should send a v2 inform" do
|
13
|
+
pending "still working on it"
|
14
|
+
did_callback = false
|
15
|
+
|
16
|
+
Net::SNMP::Session.open(:peername => '127.0.0.1', :version => '2c') do |sess|
|
17
|
+
sess.inform do |res|
|
18
|
+
did_callback = true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
did_callback.should be_true
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should send v2 trap" do
|
25
|
+
pending "still working on it"
|
26
|
+
Net::SNMP::Session.open(:peername => '127.0.0.1', :version => '2c') do |sess|
|
27
|
+
res = sess.trap_v2
|
28
|
+
res.should be_true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 7
|
9
|
+
version: 0.1.7
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ron McClain
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- spec/spec_helper.rb
|
92
92
|
- spec/sync_spec.rb
|
93
93
|
- spec/thread_spec.rb
|
94
|
+
- spec/trap_spec.rb
|
94
95
|
- spec/utility_spec.rb
|
95
96
|
- spec/wrapper_spec.rb
|
96
97
|
has_rdoc: true
|
@@ -135,5 +136,6 @@ test_files:
|
|
135
136
|
- spec/spec_helper.rb
|
136
137
|
- spec/sync_spec.rb
|
137
138
|
- spec/thread_spec.rb
|
139
|
+
- spec/trap_spec.rb
|
138
140
|
- spec/utility_spec.rb
|
139
141
|
- spec/wrapper_spec.rb
|