Class: SNMP::SNMPv1_Trap

Inherits:
Object
  • Object
show all
Extended by:
BER::Decode
Includes:
BER::Encode
Defined in:
lib/snmp/pdu.rb

Overview

The PDU class for traps in SNMPv1.

Constant Summary collapse

GENERIC_TRAP_NAME =

Name map for all of the generic traps defined in RFC 1157.

{
  0 => :coldStart,
  1 => :warmStart,
  2 => :linkDown,
  3 => :linkUp,
  4 => :authenticationFailure,
  5 => :egpNeighborLoss,
  6 => :enterpriseSpecific
}
GENERIC_TRAP_CODE =

Code map for all of the generic traps defined in RFC 1157.

GENERIC_TRAP_NAME.invert

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from BER::Decode

assert_no_remainder, build_integer, decode_integer, decode_integer_value, decode_ip_address, decode_object_id, decode_object_id_value, decode_octet_string, decode_sequence, decode_timeticks, decode_tlv, decode_uinteger_value

Methods included from BER::Encode

#encode_exception, #encode_integer, #encode_length, #encode_null, #encode_object_id, #encode_octet_string, #encode_sequence, #encode_tagged_integer, #encode_tlv, #integer_to_octets

Constructor Details

#initialize(enterprise, agent_addr, generic_trap, specific_trap, timestamp, varbind_list) ⇒ SNMPv1_Trap

Returns a new instance of SNMPv1_Trap.



356
357
358
359
360
361
362
363
# File 'lib/snmp/pdu.rb', line 356

def initialize(enterprise, agent_addr, generic_trap, specific_trap, timestamp, varbind_list)
  @enterprise = enterprise
  @agent_addr = agent_addr
  self.generic_trap = generic_trap
  @specific_trap = specific_trap
  @timestamp = timestamp
  @varbind_list = varbind_list
end

Instance Attribute Details

#agent_addrObject

Returns the value of attribute agent_addr.



334
335
336
# File 'lib/snmp/pdu.rb', line 334

def agent_addr
  @agent_addr
end

#enterpriseObject

Returns the value of attribute enterprise.



333
334
335
# File 'lib/snmp/pdu.rb', line 333

def enterprise
  @enterprise
end

#source_ipObject

Returns the source IP address for the trap, usually derived from the source IP address of the packet that delivered the trap.



331
332
333
# File 'lib/snmp/pdu.rb', line 331

def source_ip
  @source_ip
end

#specific_trapObject

Returns the value of attribute specific_trap.



335
336
337
# File 'lib/snmp/pdu.rb', line 335

def specific_trap
  @specific_trap
end

#timestampObject

Returns the value of attribute timestamp.



336
337
338
# File 'lib/snmp/pdu.rb', line 336

def timestamp
  @timestamp
end

#varbind_listObject Also known as: vb_list

Returns the value of attribute varbind_list.



337
338
339
# File 'lib/snmp/pdu.rb', line 337

def varbind_list
  @varbind_list
end

Class Method Details

.decode(pdu_data, mib = nil) ⇒ Object



341
342
343
344
345
346
347
348
349
350
351
352
353
354
# File 'lib/snmp/pdu.rb', line 341

def self.decode(pdu_data, mib=nil)
  oid_data, remainder = decode_object_id(pdu_data)
  enterprise = ObjectId.new(oid_data)
  ip_data, remainder = decode_ip_address(remainder)
  agent_addr = IpAddress.new(ip_data)
  generic_trap, remainder = decode_integer(remainder)
  specific_trap, remainder = decode_integer(remainder)
  time_data, remainder = decode_timeticks(remainder)
  timestamp = TimeTicks.new(time_data)
  varbind_list, remainder = VarBindList.decode(remainder, mib)
  assert_no_remainder(remainder)
  SNMPv1_Trap.new(enterprise, agent_addr, generic_trap, specific_trap,
                  timestamp, varbind_list)
end

Instance Method Details

#each_varbind(&block) ⇒ Object



404
405
406
# File 'lib/snmp/pdu.rb', line 404

def each_varbind(&block)
  @varbind_list.each(&block)
end

#encodeObject



394
395
396
397
398
399
400
401
402
# File 'lib/snmp/pdu.rb', line 394

def encode
  pdu_data = @enterprise.encode <<
    @agent_addr.encode <<
    encode_integer(@generic_trap) <<
    encode_integer(@specific_trap) <<
    @timestamp.encode <<
    @varbind_list.encode
  encode_tlv(BER::SNMPv1_Trap_PDU_TAG, pdu_data)
end

#generic_trapObject



390
391
392
# File 'lib/snmp/pdu.rb', line 390

def generic_trap
  GENERIC_TRAP_NAME[@generic_trap]
end

#generic_trap=(trap) ⇒ Object



379
380
381
382
383
384
385
386
387
388
# File 'lib/snmp/pdu.rb', line 379

def generic_trap=(trap)
  @generic_trap = GENERIC_TRAP_CODE[trap]
  unless @generic_trap
    if trap.respond_to?(:to_i) && GENERIC_TRAP_NAME[trap.to_i]
      @generic_trap = trap
    else
      raise InvalidGenericTrap, trap.to_s
    end
  end
end