net-snmp2 0.3.0 → 0.3.1
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.
- checksums.yaml +4 -4
- data/README.md +18 -1
- data/examples/agent.rb +1 -0
- data/examples/inform.rb +23 -0
- data/examples/trap_handler.rb +15 -0
- data/examples/{v1_trap_session.rb → v1_trap.rb} +2 -7
- data/examples/{v2_trap_session.rb → v2_trap.rb} +2 -7
- data/history.md +17 -0
- data/lib/net-snmp2.rb +1 -1
- data/lib/net/snmp/agent/agent.rb +44 -13
- data/lib/net/snmp/agent/provider.rb +56 -1
- data/lib/net/snmp/agent/provider_dsl.rb +11 -0
- data/lib/net/snmp/debug.rb +10 -19
- data/lib/net/snmp/error.rb +13 -6
- data/lib/net/snmp/listener.rb +2 -4
- data/lib/net/snmp/message.rb +52 -25
- data/lib/net/snmp/mib/mib.rb +2 -1
- data/lib/net/snmp/mib/node.rb +1 -1
- data/lib/net/snmp/oid.rb +5 -2
- data/lib/net/snmp/pdu.rb +15 -10
- data/lib/net/snmp/repl/manager_repl.rb +20 -7
- data/lib/net/snmp/session.rb +78 -45
- data/lib/net/snmp/trap_handler/trap_handler.rb +13 -9
- data/lib/net/snmp/trap_handler/v2_inform_dsl.rb +16 -0
- data/lib/net/snmp/trap_session.rb +64 -42
- data/lib/net/snmp/version.rb +1 -1
- data/lib/net/snmp/wrapper.rb +2 -8
- data/net-snmp2.gemspec +1 -1
- data/spec/README.md +36 -40
- data/spec/async_spec.rb +92 -87
- data/spec/em_spec.rb +3 -3
- data/spec/error_spec.rb +2 -2
- data/spec/fiber_spec.rb +8 -7
- data/spec/mib_spec.rb +8 -8
- data/spec/net-snmp_spec.rb +3 -3
- data/spec/oid_spec.rb +5 -5
- data/spec/spec_helper.rb +5 -0
- data/spec/sync_spec.rb +50 -56
- data/spec/test_agent.rb +150 -0
- data/spec/test_mib.rb +6 -0
- data/spec/thread_spec.rb +4 -4
- data/spec/trap_spec.rb +3 -12
- data/spec/utility_spec.rb +4 -4
- data/spec/wrapper_spec.rb +6 -6
- metadata +11 -6
- data/lib/net/snmp/agent/request_dispatcher.rb +0 -38
data/spec/test_mib.rb
ADDED
data/spec/thread_spec.rb
CHANGED
@@ -4,15 +4,15 @@ describe "in a thread" do
|
|
4
4
|
it "should get an oid asynchronously in a thread" do
|
5
5
|
did_callback = false
|
6
6
|
dispatch_thread = Net::SNMP::Dispatcher.thread_loop
|
7
|
-
Net::SNMP::Session.open(:peername => '
|
7
|
+
Net::SNMP::Session.open(:peername => 'localhost', :community => 'public') do |s|
|
8
8
|
s.get(["sysDescr.0", "sysContact.0"]) do |op, result|
|
9
9
|
did_callback = true
|
10
|
-
result.varbinds[0].value.
|
11
|
-
result.varbinds[1].value.
|
10
|
+
expect(result.varbinds[0].value).to eq $test_mib['sysDescr.0']
|
11
|
+
expect(result.varbinds[1].value).to eq $test_mib['sysContact.0']
|
12
12
|
end
|
13
13
|
end
|
14
14
|
sleep 3
|
15
|
-
did_callback.
|
15
|
+
expect(did_callback).to be(true)
|
16
16
|
|
17
17
|
Thread.kill(dispatch_thread)
|
18
18
|
end
|
data/spec/trap_spec.rb
CHANGED
@@ -15,14 +15,14 @@ describe Net::SNMP::TrapSession do
|
|
15
15
|
uptime: 1000,
|
16
16
|
agent_addr: '127.0.0.1'
|
17
17
|
)
|
18
|
-
res.
|
18
|
+
expect(res).to eq(:success)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should send v2 trap" do
|
23
23
|
Net::SNMP::TrapSession.open(:peername => 'localhost:163', :version => '2c') do |sess|
|
24
24
|
res = sess.trap_v2(:oid => 'sysContact.0', :uptime => 1000)
|
25
|
-
res.
|
25
|
+
expect(res).to eq(:success)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -30,16 +30,7 @@ describe Net::SNMP::TrapSession do
|
|
30
30
|
did_callback = false
|
31
31
|
Net::SNMP::TrapSession.open(:peername => 'localhost:163', :version => '2c') do |sess|
|
32
32
|
resp = sess.inform(:oid => 'coldStart.0')
|
33
|
-
|
34
|
-
# Got some weird segfaults when using rspec's ".should include {...}"
|
35
|
-
# matcher, so I did this manually.
|
36
|
-
resp.varbinds.each do |vb|
|
37
|
-
if (vb.oid.to_s == Net::SNMP::MIB.translate('snmpTrapOID.0')) &&
|
38
|
-
(vb.value.to_s == Net::SNMP::MIB.translate('coldStart.0'))
|
39
|
-
has_cold_start_oid = true
|
40
|
-
end
|
41
|
-
end
|
42
|
-
has_cold_start_oid.should eq(true)
|
33
|
+
expect(resp).to eq(:success)
|
43
34
|
end
|
44
35
|
end
|
45
36
|
end
|
data/spec/utility_spec.rb
CHANGED
@@ -2,9 +2,9 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
3
3
|
describe Net::SNMP::Utility do
|
4
4
|
it "should compare oids" do
|
5
|
-
Net::SNMP::Utility.oid_lex_cmp('1.3.5', '1.3.7').
|
6
|
-
Net::SNMP::Utility.oid_lex_cmp('1.3.7', '1.3.5').
|
7
|
-
Net::SNMP::Utility.oid_lex_cmp('1.3.7', '1.3.7.1').
|
8
|
-
Net::SNMP::Utility.oid_lex_cmp('1.3.5', '1.3.5').
|
5
|
+
expect(Net::SNMP::Utility.oid_lex_cmp('1.3.5', '1.3.7')).to eql(-1)
|
6
|
+
expect(Net::SNMP::Utility.oid_lex_cmp('1.3.7', '1.3.5')).to eql(1)
|
7
|
+
expect(Net::SNMP::Utility.oid_lex_cmp('1.3.7', '1.3.7.1')).to eql(-1)
|
8
|
+
expect(Net::SNMP::Utility.oid_lex_cmp('1.3.5', '1.3.5')).to eql(0)
|
9
9
|
end
|
10
10
|
end
|
data/spec/wrapper_spec.rb
CHANGED
@@ -2,8 +2,8 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
3
3
|
describe "Net::SNMP::Wrapper" do
|
4
4
|
def init_session
|
5
|
-
community = "
|
6
|
-
peername = "
|
5
|
+
community = "public"
|
6
|
+
peername = "localhost"
|
7
7
|
|
8
8
|
@session = Net::SNMP::Wrapper::SnmpSession.new(nil)
|
9
9
|
Net::SNMP::Wrapper.snmp_sess_init(@session.pointer)
|
@@ -33,11 +33,11 @@ describe "Net::SNMP::Wrapper" do
|
|
33
33
|
|
34
34
|
response_ptr = FFI::MemoryPointer.new(:pointer)
|
35
35
|
status = Net::SNMP::Wrapper.snmp_sess_synch_response(@handle, @pdu.pointer, response_ptr)
|
36
|
-
status.
|
36
|
+
expect(status).to eql(0)
|
37
37
|
|
38
38
|
response = Net::SNMP::Wrapper::SnmpPdu.new(response_ptr.read_pointer)
|
39
39
|
value = response.variables.val[:string].read_string(response.variables.val_len)
|
40
|
-
value.
|
40
|
+
expect(value).to eq $test_mib['sysDescr.0']
|
41
41
|
end
|
42
42
|
|
43
43
|
it "wrapper should snmpget asynchronously" do
|
@@ -63,7 +63,7 @@ describe "Net::SNMP::Wrapper" do
|
|
63
63
|
Net::SNMP::Wrapper.snmp_select_info(fds, fdset, tval.pointer, block )
|
64
64
|
FFI::LibC.select(fds.read_int, fdset, nil, nil, nil)
|
65
65
|
Net::SNMP::Wrapper.snmp_read(fdset)
|
66
|
-
did_callback.
|
67
|
-
result.
|
66
|
+
expect(did_callback).to be(1)
|
67
|
+
expect(result).to eq $test_mib['sysDescr.0']
|
68
68
|
end
|
69
69
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-snmp2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ron McClain
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-11-
|
12
|
+
date: 2014-11-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nice-ffi
|
@@ -88,16 +88,17 @@ files:
|
|
88
88
|
- bin/mib2rb
|
89
89
|
- bin/net-snmp2
|
90
90
|
- examples/agent.rb
|
91
|
+
- examples/inform.rb
|
91
92
|
- examples/manager.rb
|
92
93
|
- examples/trap_handler.rb
|
93
|
-
- examples/
|
94
|
-
- examples/
|
94
|
+
- examples/v1_trap.rb
|
95
|
+
- examples/v2_trap.rb
|
96
|
+
- history.md
|
95
97
|
- lib/net-snmp2.rb
|
96
98
|
- lib/net/snmp.rb
|
97
99
|
- lib/net/snmp/agent/agent.rb
|
98
100
|
- lib/net/snmp/agent/provider.rb
|
99
101
|
- lib/net/snmp/agent/provider_dsl.rb
|
100
|
-
- lib/net/snmp/agent/request_dispatcher.rb
|
101
102
|
- lib/net/snmp/constants.rb
|
102
103
|
- lib/net/snmp/debug.rb
|
103
104
|
- lib/net/snmp/dispatcher.rb
|
@@ -114,6 +115,7 @@ files:
|
|
114
115
|
- lib/net/snmp/session.rb
|
115
116
|
- lib/net/snmp/trap_handler/trap_handler.rb
|
116
117
|
- lib/net/snmp/trap_handler/v1_trap_dsl.rb
|
118
|
+
- lib/net/snmp/trap_handler/v2_inform_dsl.rb
|
117
119
|
- lib/net/snmp/trap_handler/v2_trap_dsl.rb
|
118
120
|
- lib/net/snmp/trap_session.rb
|
119
121
|
- lib/net/snmp/utility.rb
|
@@ -131,6 +133,8 @@ files:
|
|
131
133
|
- spec/oid_spec.rb
|
132
134
|
- spec/spec_helper.rb
|
133
135
|
- spec/sync_spec.rb
|
136
|
+
- spec/test_agent.rb
|
137
|
+
- spec/test_mib.rb
|
134
138
|
- spec/thread_spec.rb
|
135
139
|
- spec/trap_spec.rb
|
136
140
|
- spec/utility_spec.rb
|
@@ -141,9 +145,10 @@ metadata: {}
|
|
141
145
|
post_install_message:
|
142
146
|
rdoc_options:
|
143
147
|
- --main=README.md
|
148
|
+
- --markup=markdown
|
144
149
|
- --line-numbers
|
145
150
|
- --inline-source
|
146
|
-
- --title=net-snmp2-0.3.
|
151
|
+
- --title=net-snmp2-0.3.1 Documentation
|
147
152
|
require_paths:
|
148
153
|
- lib
|
149
154
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module Net::SNMP
|
2
|
-
|
3
|
-
# RequestDispatcher module handles calling all required providers for a request
|
4
|
-
# in the context of a ProviderDsl object (which itself provides the agent DSL)
|
5
|
-
|
6
|
-
module RequestDispatcher
|
7
|
-
|
8
|
-
def self.dispatch(message, providers)
|
9
|
-
response_pdu = Message::response_pdu_for(message)
|
10
|
-
context = ProviderDsl.new
|
11
|
-
context.message = message
|
12
|
-
context.response_pdu = response_pdu
|
13
|
-
message.pdu.varbinds.each_with_index do |vb, index|
|
14
|
-
context.varbind = vb
|
15
|
-
provider = providers.find { |p| p.oid == :all || vb.oid.to_s.start_with?(p.oid.to_s) }
|
16
|
-
if provider
|
17
|
-
if message.pdu.command == Constants::SNMP_MSG_GETBULK && index < message.pdu.non_repeaters
|
18
|
-
handler = provider.handler_for(Constants::SNMP_MSG_GETNEXT)
|
19
|
-
else
|
20
|
-
handler = provider.handler_for(message)
|
21
|
-
end
|
22
|
-
if handler
|
23
|
-
context.instance_exec(&handler)
|
24
|
-
else
|
25
|
-
Debug.warn "No handler for command: #{message.pdu.command} @ #{vb.oid}"
|
26
|
-
context.no_such_object
|
27
|
-
end
|
28
|
-
else
|
29
|
-
Debug.warn "No provider for oid: #{vb.oid}"
|
30
|
-
context.no_such_object
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
response_pdu
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|