Class SNMP::TrapListener
In: lib/snmp/manager.rb
Parent: Object

SNMP Trap Listener

Listens to a socket and processes received traps and informs in a separate thread.

Example

  require 'snmp'

  m = SNMP::TrapListener.new(:Port => 1062, :Community => 'public') do |manager|
    manager.on_trap_default { |trap| p trap }
  end
  m.join

Methods

exit   join   kill   new   on_trap   on_trap_default   on_trap_v1   on_trap_v2c   terminate  

Constants

DefaultConfig = { :Host => 'localhost', :Port => 162, :Community => 'public', :ServerTransport => UDPServerTransport, :MaxReceiveBytes => 8000}
NULL_HANDLER = Proc.new {}

Public Class methods

Start a trap handler thread. If a block is provided then the block is executed before trap handling begins. This block is typically used to define the trap handler blocks.

The trap handler blocks execute in the context of the trap handler thread.

The most specific trap handler is executed when a trap arrives. Only one handler is executed. The handlers are checked in the following order:

  1. handler for a specific OID
  2. handler for a specific SNMP version
  3. default handler

[Source]

# File lib/snmp/manager.rb, line 557
    def initialize(config={}, &block)
        @config = DefaultConfig.dup.update(config)
        @transport = @config[:ServerTransport].new(@config[:Host], @config[:Port])
        @max_bytes = @config[:MaxReceiveBytes]
        @handler_init = block
        @oid_handler = {}
        @v1_handler = nil
        @v2c_handler = nil
        @default_handler = nil
        @lock = Mutex.new
        @handler_thread = Thread.new(self) { |m| process_traps(m) }
    end

Public Instance methods

Stops the trap handler thread and releases the socket.

See also Thread#exit.

[Source]

# File lib/snmp/manager.rb, line 624
    def exit
        @handler_thread.exit
        @transport.close
    end

Joins the current thread to the trap handler thread.

See also Thread#join.

[Source]

# File lib/snmp/manager.rb, line 615
    def join
        @handler_thread.join
    end
kill()

Alias for exit

Define a trap handler block for a specific trap ObjectId. This handler only applies to SNMPv2 traps. Note that symbolic OIDs are not supported by this method (like in the SNMP.Manager class).

[Source]

# File lib/snmp/manager.rb, line 585
    def on_trap(object_id, &block)
        raise ArgumentError, "a block must be provided" unless block
        @lock.synchronize { @oid_handler[ObjectId.new(object_id)] = block }
    end

Define the default trap handler. The default trap handler block is executed only if no other block is applicable. This handler should expect to receive both SNMPv1_Trap and SNMPv2_Trap objects.

[Source]

# File lib/snmp/manager.rb, line 575
    def on_trap_default(&block)
        raise ArgumentError, "a block must be provided" unless block
        @lock.synchronize { @default_handler = block }
    end

Define a trap handler block for all SNMPv1 traps. The trap yielded to the block will always be an SNMPv1_Trap.

[Source]

# File lib/snmp/manager.rb, line 594
    def on_trap_v1(&block)
        raise ArgumentError, "a block must be provided" unless block
        @lock.synchronize { @v1_handler = block }
    end

Define a trap handler block for all SNMPv2c traps. The trap yielded to the block will always be an SNMPv2_Trap. Note that InformRequest is a subclass of SNMPv2_Trap, so inform PDUs are also received by this handler.

[Source]

# File lib/snmp/manager.rb, line 605
    def on_trap_v2c(&block)
        raise ArgumentError, "a block must be provided" unless block
        @lock.synchronize { @v2c_handler = block }
    end
terminate()

Alias for exit

[Validate]