Class: SNMP::PDU

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

Constant Summary collapse

ERROR_STATUS_NAME =
{
  0 => :noError,
  1 => :tooBig,
  2 => :noSuchName,
  3 => :badValue,
  4 => :readOnly,
  5 => :genErr,
  6 => :noAccess,
  7 => :wrongType,
  8 => :wrongLength,
  9 => :wrongEncoding,
  10 => :wrongValue,
  11 => :noCreation,
  12 => :inconsistentValue,
  13 => :resourceUnavailable,
  14 => :commitFailed,
  15 => :undoFailed,
  16 => :authorizationError,
  17 => :notWritable,
  18 => :inconsistentName
}
ERROR_STATUS_CODE =
ERROR_STATUS_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(request_id, varbind_list, error_status = 0, error_index = 0) ⇒ PDU

Returns a new instance of PDU.



173
174
175
176
177
178
# File 'lib/snmp/pdu.rb', line 173

def initialize(request_id, varbind_list, error_status=0, error_index=0)
  @request_id = request_id
  self.error_status = error_status
  @error_index = error_index.to_int
  @varbind_list = varbind_list
end

Instance Attribute Details

#error_indexObject

Returns the value of attribute error_index.



135
136
137
# File 'lib/snmp/pdu.rb', line 135

def error_index
  @error_index
end

#request_idObject

Returns the value of attribute request_id.



134
135
136
# File 'lib/snmp/pdu.rb', line 134

def request_id
  @request_id
end

#varbind_listObject Also known as: vb_list

Returns the value of attribute varbind_list.



136
137
138
# File 'lib/snmp/pdu.rb', line 136

def varbind_list
  @varbind_list
end

Class Method Details

.decode(pdu_class, pdu_data, mib = nil) ⇒ Object



140
141
142
143
144
145
146
147
# File 'lib/snmp/pdu.rb', line 140

def self.decode(pdu_class, pdu_data, mib=nil)
  request_id, remainder = decode_integer(pdu_data)
  error_status, remainder = decode_integer(remainder)
  error_index, remainder = decode_integer(remainder)
  varbind_list, remainder = VarBindList.decode(remainder, mib)
  assert_no_remainder(remainder)
  pdu_class.new(request_id, varbind_list, error_status, error_index)
end

Instance Method Details

#each_varbind(&block) ⇒ Object



203
204
205
# File 'lib/snmp/pdu.rb', line 203

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

#encode_pdu(pdu_tag) ⇒ Object



195
196
197
198
199
200
201
# File 'lib/snmp/pdu.rb', line 195

def encode_pdu(pdu_tag)
  pdu_data = encode_integer(@request_id)
  pdu_data << encode_integer(@error_status)
  pdu_data << encode_integer(@error_index)
  pdu_data << @varbind_list.encode
  encode_tlv(pdu_tag, pdu_data)
end

#error_statusObject



191
192
193
# File 'lib/snmp/pdu.rb', line 191

def error_status
  ERROR_STATUS_NAME[@error_status] || @error_status
end

#error_status=(status) ⇒ Object



180
181
182
183
184
185
186
187
188
189
# File 'lib/snmp/pdu.rb', line 180

def error_status=(status)
  @error_status = ERROR_STATUS_CODE[status]
  unless @error_status
    if status.respond_to?(:to_int)
      @error_status = status.to_int
    else
      raise InvalidErrorStatus, status.to_s
    end
  end
end