Class: SNMP::Agent

Inherits:
Object
  • Object
show all
Defined in:
lib/snmp/agent.rb

Overview

:nodoc:all

Instance Method Summary collapse

Constructor Details

#initialize(listen_port = 161, max_packet = 8000) ⇒ Agent

Returns a new instance of Agent.



18
19
20
21
22
23
24
25
# File 'lib/snmp/agent.rb', line 18

def initialize(listen_port=161, max_packet=8000)
    @log = Logger.new(STDOUT)
    @log.level = Logger::DEBUG
    @max_packet = max_packet
    @socket = UDPSocket.open
    @socket.bind(nil, listen_port)
    @mib = MIB::SystemMIB.new
end

Instance Method Details

#shutdownObject Also known as: stop



57
58
59
60
61
# File 'lib/snmp/agent.rb', line 57

def shutdown
    @log.info "SNMP agent stopping"
    @socket.close
    exit
end

#startObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/snmp/agent.rb', line 27

def start
    @log.info "SNMP agent running"
    loop do
        begin
            data, remote_info = @socket.recvfrom(@max_packet)
            puts "Received #{data.length} bytes"
            p data
            message = Message.decode(data)
            case message.pdu
                when GetRequest
                    response = message.response
                    response.pdu.varbind_list.each do |v|
                        v.value = @mib.get(v.name)
                    end
                when SetRequest
                    response = message.response
                else
                    raise "invalid message #{message.to_s}"
            end
            puts "Responding to #{remote_info[3]}:#{remote_info[1]}"
            encoded_message = response.encode
            n=@socket.send(encoded_message, 0, remote_info[3], remote_info[1])
            p encoded_message
        rescue => e
            @log.error e
            shutdown
        end
    end
end