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



31
32
33
34
35
36
37
38
# File 'lib/snmp/agent.rb', line 31

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



70
71
72
73
74
# File 'lib/snmp/agent.rb', line 70

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

#startObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/snmp/agent.rb', line 40

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